From 6cdd1be93e2b8f8defa5e5faba7b93546cf4d1e7 Mon Sep 17 00:00:00 2001 From: Park DongHa Date: Tue, 17 Nov 2020 23:31:06 +0900 Subject: [PATCH] Update build.gradle for latest AGP (#2026) * update build.gradle for latest AGP * bump Android Gradle Plugin version to 4.1.1 * ignore .cxx which was externalNativeBuild in old versions Use variable 'rootDir' instead of using relative path. * build.gradle copies AAR files to libs/ --- .gitignore | 1 + support/build.gradle | 73 +++++++++++++++++++++++++++++--------------- 2 files changed, 50 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index e95cbaa8..8a37cb98 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ gradle/ gradlew* local.properties build/ +support/.cxx bin/ /_CPack_Packages diff --git a/support/build.gradle b/support/build.gradle index 11648da8..8d18da6b 100644 --- a/support/build.gradle +++ b/support/build.gradle @@ -1,3 +1,4 @@ +import java.nio.file.Paths // General gradle arguments for root project buildscript { @@ -7,24 +8,25 @@ buildscript { } dependencies { // - // https://developer.android.com/studio/releases/gradle-plugin + // https://developer.android.com/studio/releases/gradle-plugin#updating-gradle // - // Notice that 3.3.0 here is the version of [Android Gradle Plugin] - // Accroding to URL above you will need Gradle 5.0 or higher + // Notice that 4.0.0 here is the version of [Android Gradle Plugin] + // Accroding to URL above you will need Gradle 6.1 or higher // - // If you are using Android Studio, and it is using Gradle's lower - // version, Use the plugin version 3.1.3 ~ 3.2.0 for Gradle 4.4 ~ 4.10 - classpath 'com.android.tools.build:gradle:3.3.0' + classpath "com.android.tools.build:gradle:4.1.1" } } repositories { google() jcenter() } - -// Output: Shared library (.so) for Android -apply plugin: 'com.android.library' +// Project's root where CMakeLists.txt exists: rootDir/support/.cxx -> rootDir +def rootDir = Paths.get(project.buildDir.getParent()).getParent() +println("rootDir: ${rootDir}") + +// Output: Shared library (.so) for Android +apply plugin: "com.android.library" android { compileSdkVersion 25 // Android 7.0 @@ -41,13 +43,13 @@ android { include "arm64-v8a", "armeabi-v7a", "x86_64" } } + ndkVersion "21.3.6528147" // ANDROID_NDK_HOME is deprecated. Be explicit defaultConfig { minSdkVersion 21 // Android 5.0+ targetSdkVersion 25 // Follow Compile SDK - versionCode 21 // Follow release count - versionName "5.3.0" // Follow Official version - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + versionCode 34 // Follow release count + versionName "7.1.2" // Follow Official version externalNativeBuild { cmake { @@ -56,9 +58,9 @@ android { arguments "-DFMT_TEST=false" // Skip test arguments "-DFMT_DOC=false" // Skip document cppFlags "-std=c++17" + targets "fmt" } } - println("Gradle CMake Plugin: ") println(externalNativeBuild.cmake.cppFlags) println(externalNativeBuild.cmake.arguments) } @@ -69,16 +71,27 @@ android { // neighbor of the top level cmake externalNativeBuild { cmake { - path "../CMakeLists.txt" + version "3.10.0+" + path "${rootDir}/CMakeLists.txt" // buildStagingDirectory "./build" // Custom path for cmake output } - //println(cmake.path) } sourceSets{ // Android Manifest for Gradle main { - manifest.srcFile 'AndroidManifest.xml' + manifest.srcFile "AndroidManifest.xml" + } + } + + // https://developer.android.com/studio/build/native-dependencies#build_system_configuration + buildFeatures { + prefab true + prefabPublishing true + } + prefab { + fmt { + headers "${rootDir}/include" } } } @@ -88,20 +101,32 @@ assemble.doLast // Instead of `ninja install`, Gradle will deploy the files. // We are doing this since FMT is dependent to the ANDROID_STL after build copy { - from 'build/intermediates/cmake' - into '../libs' + from "build/intermediates/cmake" + into "${rootDir}/libs" } // Copy debug binaries copy { - from '../libs/debug/obj' - into '../libs/debug' + from "${rootDir}/libs/debug/obj" + into "${rootDir}/libs/debug" } // Copy Release binaries copy { - from '../libs/release/obj' - into '../libs/release' + from "${rootDir}/libs/release/obj" + into "${rootDir}/libs/release" } // Remove empty directory - delete '../libs/debug/obj' - delete '../libs/release/obj' + delete "${rootDir}/libs/debug/obj" + delete "${rootDir}/libs/release/obj" + + // Copy AAR files. Notice that the aar is named after the folder of this script. + copy { + from "build/outputs/aar/support-release.aar" + into "${rootDir}/libs" + rename "support-release.aar", "fmt-release.aar" + } + copy { + from "build/outputs/aar/support-debug.aar" + into "${rootDir}/libs" + rename "support-debug.aar", "fmt-debug.aar" + } }