From a95d2bb6251ddf82a65edd03353d3a1cd1a67e2f Mon Sep 17 00:00:00 2001 From: Cody Northrop Date: Mon, 24 Jul 2017 20:15:30 -0600 Subject: [PATCH] android: Update packaging to work with latest SDK This removes dependencies on deprecated tools "ant" and "android project" The new method relies on JAVA_HOME and ANDROID_SDK being set. It also requires specific versions of the Android build-tools (26.0.1) and platforms (android-23). See updates to CONTRIBUTING.md and our Travis-CI config for details. Travis-CI and documentation also roll forward to latest public NDK r14b. --- renderdoccmd/CMakeLists.txt | 42 +++++++++++++++++++++++++-------- scripts/travis/android_setup.sh | 1 + 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/renderdoccmd/CMakeLists.txt b/renderdoccmd/CMakeLists.txt index c748dccd5..6cbf8a1d2 100644 --- a/renderdoccmd/CMakeLists.txt +++ b/renderdoccmd/CMakeLists.txt @@ -57,23 +57,45 @@ target_link_libraries(renderdoccmd ${libraries}) install (TARGETS renderdoccmd DESTINATION bin) if(ANDROID) + if(NOT DEFINED ENV{JAVA_HOME}) + message(FATAL_ERROR "JAVA_HOME environment variable must be defined for Android build") + endif() + if(NOT DEFINED ENV{ANDROID_SDK}) + message(FATAL_ERROR "ANDROID_SDK environment variable must be defined for Android build") + endif() + + set(BUILD_TOOLS "$ENV{ANDROID_SDK}/build-tools/26.0.1") + set(ANDROID_JAR "$ENV{ANDROID_SDK}/platforms/android-23/android.jar") + set(RT_JAR "$ENV{JAVA_HOME}/jre/lib/rt.jar") + set(JAVA_BIN "$ENV{JAVA_HOME}/bin") + set(APK_TARGET_ID "android-23" CACHE STRING "The Target ID to build the APK for, use to choose another one.") + set(KEYSTORE ${CMAKE_CURRENT_BINARY_DIR}/debug.keystore) + add_custom_command(OUTPUT ${KEYSTORE} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND ${JAVA_BIN}/keytool -genkey -keystore ${KEYSTORE} -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=, OU=, O=, L=, S=, C=") set(APK_FILE ${CMAKE_BINARY_DIR}/bin/RenderDocCmd.apk) add_custom_target(apk ALL - DEPENDS ${APK_FILE}) + DEPENDS ${APK_FILE} + DEPENDS ${KEYSTORE}) + add_custom_command(OUTPUT ${APK_FILE} DEPENDS renderdoc DEPENDS renderdoccmd WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/android ${CMAKE_CURRENT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E make_directory libs/${ANDROID_ABI} - COMMAND ${CMAKE_COMMAND} -E copy $ libs/${ANDROID_ABI}/libVkLayer_GLES_RenderDoc.so - COMMAND ${CMAKE_COMMAND} -E copy $ libs/${ANDROID_ABI}/$ - COMMAND android update project --path . --name RenderDocCmd --target ${APK_TARGET_ID} - COMMAND ant debug - COMMAND ${CMAKE_COMMAND} -E copy bin/RenderDocCmd-debug.apk ${APK_FILE} - COMMAND ${CMAKE_COMMAND} -E make_directory libs/lib - COMMAND ${CMAKE_COMMAND} -E copy_directory libs/${ANDROID_ABI} libs/lib/${ANDROID_ABI} - COMMAND ${CMAKE_COMMAND} -E remove_directory libs/${ANDROID_ABI}) + COMMAND ${CMAKE_COMMAND} -E make_directory libs/lib/${ANDROID_ABI} + COMMAND ${CMAKE_COMMAND} -E make_directory obj + COMMAND ${CMAKE_COMMAND} -E make_directory bin + COMMAND ${CMAKE_COMMAND} -E copy $ libs/lib/${ANDROID_ABI}/libVkLayer_GLES_RenderDoc.so + COMMAND ${CMAKE_COMMAND} -E copy $ libs/lib/${ANDROID_ABI}/$ + COMMAND ${BUILD_TOOLS}/aapt package -f -m -S res -J src -M AndroidManifest.xml -I ${ANDROID_JAR} + COMMAND ${JAVA_BIN}/javac -d ./obj -source 1.7 -target 1.7 -bootclasspath ${RT_JAR} -classpath ${ANDROID_JAR}:obj -sourcepath src src/org/renderdoc/renderdoccmd/*.java + COMMAND ${BUILD_TOOLS}/dx --dex --output=bin/classes.dex ./obj + COMMAND ${BUILD_TOOLS}/aapt package -f -M AndroidManifest.xml -S res -I ${ANDROID_JAR} -F RenderDocCmd-unaligned.apk bin libs + COMMAND ${BUILD_TOOLS}/zipalign -f 4 RenderDocCmd-unaligned.apk RenderDocCmd.apk + COMMAND ${BUILD_TOOLS}/apksigner sign --ks ${KEYSTORE} --ks-pass pass:android --key-pass pass:android --ks-key-alias androiddebugkey RenderDocCmd.apk + COMMAND ${CMAKE_COMMAND} -E copy RenderDocCmd.apk ${APK_FILE}) + endif() diff --git a/scripts/travis/android_setup.sh b/scripts/travis/android_setup.sh index a884b8256..7a9a9b4ed 100644 --- a/scripts/travis/android_setup.sh +++ b/scripts/travis/android_setup.sh @@ -23,6 +23,7 @@ mv android-7.1.1/* build-tools/25.0.2/ export ANDROID_HOME=`pwd`/tools export JAVA_HOME="/usr/lib/jvm/java-8-oracle" export ANDROID_NDK=`pwd`/android-ndk-r13b +export ANDROID_SDK=`pwd` export PATH=`pwd`/android-ndk-r13b:$PATH export PATH=`pwd`/tools:$PATH export PATH=`pwd`/platform-tools:$PATH