Merge pull request #2597 from endrift/android-allow-ndk-override

Android: Allow NDK location to be specified manually
This commit is contained in:
Ryan Houdek
2015-06-13 13:56:53 -05:00
2 changed files with 61 additions and 42 deletions

View File

@ -63,11 +63,13 @@ following inside:
makeArgs=<make-args> makeArgs=<make-args>
``` ```
Replace `<make-args>` with any arguments you want to pass to `make`, and then execute the Replace `<make-args>` with any arguments you want to pass to `make`. If you need to use a specific
`assembleDebug` or `installDebug` task corresponding to the hardware platform you are targeting. version of git, cmake, or the NDK, you can also add `gitPath=<path>`, `cmakePath=<path>` or
For example, to deploy to a Nexus 9, which runs the AArch64 architecture, execute `installArm_64Debug`. `ndkPath=<path>`, replacing `<path>` with the actual paths. Otherwise, these will be found
A list of available tasks can be found in Android Studio in the Gradle tray, located at the top-right automatically. Then execute the `assembleDebug` or `installDebug` task corresponding to the
corner of the IDE by default. hardware platform you are targeting. For example, to deploy to a Nexus 9, which runs the AArch64
architecture, execute `installArm_64Debug`. A list of available tasks can be found in Android
Studio in the Gradle tray, located at the top-right corner of the IDE by default.
The native libraries will be compiled, and copied into `./Source/Android/app/libs`. Android Studio The native libraries will be compiled, and copied into `./Source/Android/app/libs`. Android Studio
and Gradle will include any libraries in that folder into the APK at build time. and Gradle will include any libraries in that folder into the APK at build time.

View File

@ -101,13 +101,13 @@ task setupCMake(type: Exec) {
mkdir('build/' + abi) mkdir('build/' + abi)
workingDir 'build/' + abi workingDir 'build/' + abi
executable 'cmake' executable getExecutablePath("cmake")
args "-DANDROID=true", args "-DANDROID=true",
"-DANDROID_NATIVE_API_LEVEL=android-18", "-DANDROID_NATIVE_API_LEVEL=android-18",
"-DCMAKE_TOOLCHAIN_FILE=../../../android.toolchain.cmake", "-DCMAKE_TOOLCHAIN_FILE=../../../android.toolchain.cmake",
"../../../../..", "../../../../..",
"-DGIT_EXECUTABLE=" + getGitPath(), "-DGIT_EXECUTABLE=" + getExecutablePath("git"),
"-DANDROID_NDK=" + getNdkPath(), "-DANDROID_NDK=" + getNdkPath(),
"-DANDROID_TOOLCHAIN_NAME=" + getToolchainName(), "-DANDROID_TOOLCHAIN_NAME=" + getToolchainName(),
"-DANDROID_ABI=" + abi "-DANDROID_ABI=" + abi
@ -140,27 +140,44 @@ task compileNative(type: Exec, dependsOn: 'setupCMake') {
} }
} }
String getGitPath() { String getExecutablePath(String command) {
def propsFile = rootProject.file("build.properties")
def path = null
if (propsFile.canRead()) {
def buildProperties = new Properties()
buildProperties.load(new FileInputStream(propsFile))
println buildProperties
path = buildProperties[command + "Path"]
}
if (path == null) {
try { try {
def stdout = new ByteArrayOutputStream() def stdout = new ByteArrayOutputStream()
exec { exec {
commandLine 'which', 'git' commandLine 'which', command
standardOutput = stdout standardOutput = stdout
} }
def gitPath = stdout.toString().trim() path = stdout.toString().trim()
project.logger.quiet("Gradle: Found git executuable:" + gitPath)
return gitPath
} catch (ignored) { } catch (ignored) {
// Shouldn't happen. How did the user get this file without git? project.logger.error("Gradle error: Couldn't find " + command + " executable.")
project.logger.error("Gradle error: Couldn't find git executable.")
return null;
} }
} }
if (path != null) {
project.logger.quiet("Gradle: Found " + command + " executuable:" + path)
}
return path
}
String getNdkPath() { String getNdkPath() {
def propsFile = rootProject.file("build.properties")
def ndkPath = null
if (propsFile.canRead()) {
def buildProperties = new Properties()
buildProperties.load(new FileInputStream(propsFile))
ndkPath = buildProperties.ndkPath
}
if (ndkPath == null) {
try { try {
def stdout = new ByteArrayOutputStream() def stdout = new ByteArrayOutputStream()
@ -171,16 +188,16 @@ String getNdkPath() {
} }
def ndkCmdPath = stdout.toString() def ndkCmdPath = stdout.toString()
def ndkPath = ndkCmdPath.substring(0, ndkCmdPath.lastIndexOf('/')) ndkPath = ndkCmdPath.substring(0, ndkCmdPath.lastIndexOf('/'))
project.logger.quiet("Gradle: Found Android NDK:" + ndkPath)
return ndkPath
} catch (ignored) { } catch (ignored) {
project.logger.error("Gradle error: Couldn't find NDK.") project.logger.error("Gradle error: Couldn't find NDK.")
return null;
} }
} }
if (ndkPath != null) {
project.logger.quiet("Gradle: Found Android NDK: " + ndkPath)
}
return ndkPath
}
String getAbi() { String getAbi() {
String taskName = getGradle().startParameter.taskNames[0] String taskName = getGradle().startParameter.taskNames[0]