mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 15:21:02 +02:00
146 lines
No EOL
6.6 KiB
CMake
146 lines
No EOL
6.6 KiB
CMake
#*********************************************************#
|
|
#* File: Apk.cmake *
|
|
#* Android apk tools
|
|
#*
|
|
#* Copyright (C) 2002-2013 The PixelLight Team (http://www.pixellight.org/)
|
|
#*
|
|
#* This file is part of PixelLight.
|
|
#*
|
|
#* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
#* and associated documentation files (the "Software"), to deal in the Software without
|
|
#* restriction, including without limitation the rights to use, copy, modify, merge, publish,
|
|
#* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
|
|
#* Software is furnished to do so, subject to the following conditions:
|
|
#*
|
|
#* The above copyright notice and this permission notice shall be included in all copies or
|
|
#* substantial portions of the Software.
|
|
#*
|
|
#* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
|
|
#* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
#* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
#* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
#* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
#*********************************************************#
|
|
|
|
|
|
##################################################
|
|
## Options
|
|
##################################################
|
|
set(ANDROID_APK_API_LEVEL "19" CACHE STRING "Android APK API level")
|
|
set(ANDROID_APK_INSTALL "0" CACHE BOOL "Install created apk file on the device automatically?")
|
|
set(ANDROID_APK_RUN "0" CACHE BOOL "Run created apk file on the device automatically? (installs it automatically as well, \"ANDROID_APK_INSTALL\"-option is ignored)")
|
|
set(ANDROID_APK_SIGNER_KEYSTORE "~/my-release-key.keystore" CACHE STRING "Keystore for signing the apk file (only required for release apk)")
|
|
set(ANDROID_APK_SIGNER_ALIAS "myalias" CACHE STRING "Alias for signing the apk file (only required for release apk)")
|
|
|
|
##################################################
|
|
## Variables
|
|
##################################################
|
|
set(ANDROID_THIS_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) # Directory this CMake file is in
|
|
|
|
##################################################
|
|
## MACRO: android_create_apk
|
|
##
|
|
## Create/copy Android apk related files
|
|
##
|
|
## @param name
|
|
## Name of the project (e.g. "MyProject"), this will also be the name of the created apk file
|
|
## @param apk_pacakge_name
|
|
## Pacakge name of the application
|
|
## @param apk_directory
|
|
## Directory were to construct the apk file in (e.g. "${CMAKE_BINARY_DIR}/apk")
|
|
## @param libs_directory
|
|
## Directory where the built android libraries will be POST_BUILD, e.g ${CMAKE_SOURCE_DIR}/libs
|
|
## @param assets_directory
|
|
## Directory where the assets for the application are locatated
|
|
##
|
|
## @remarks
|
|
## Requires the following tools to be found automatically
|
|
## - "android" (part of the Android SDK)
|
|
## - "adb" (part of the Android SDK)
|
|
## - "ant" (type e.g. "sudo apt-get install ant" on your Linux system to install Ant)
|
|
## - "jarsigner" (part of the JDK)
|
|
## - "zipalign" (part of the Android SDK)
|
|
##################################################
|
|
macro(android_create_apk name apk_package_name apk_directory libs_directory android_directory assets_directory)
|
|
set(ANDROID_NAME ${name})
|
|
set(ANDROID_APK_PACKAGE ${apk_package_name})
|
|
|
|
# Create the directory for the libraries
|
|
add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory "${apk_directory}/libs")
|
|
add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${apk_directory}/libs")
|
|
add_custom_command(TARGET ${ANDROID_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${libs_directory}" "${apk_directory}/libs/")
|
|
|
|
# Create "build.xml", "default.properties", "local.properties" and "proguard.cfg" files
|
|
if(CMAKE_BUILD_TYPE MATCHES Release)
|
|
set(ANDROID_APK_DEBUGGABLE "false")
|
|
else()
|
|
set(ANDROID_APK_DEBUGGABLE "true")
|
|
endif()
|
|
|
|
add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${apk_directory}/res")
|
|
add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${android_directory}/res" "${apk_directory}/res/")
|
|
|
|
configure_file("${android_directory}/AndroidManifest.xml" "${apk_directory}/AndroidManifest.xml")
|
|
|
|
add_custom_command(TARGET ${ANDROID_NAME}
|
|
COMMAND android update project -t android-${ANDROID_APK_API_LEVEL} --name ${ANDROID_NAME} --path "${apk_directory}")
|
|
|
|
# Copy assets
|
|
add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory "${apk_directory}/assets")
|
|
add_custom_command(TARGET ${ANDROID_NAME} PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${apk_directory}/assets/")
|
|
add_custom_command(TARGET ${ANDROID_NAME} POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${CMAKE_SOURCE_DIR}/assets" "${apk_directory}/assets/")
|
|
|
|
# Build the apk file
|
|
if(CMAKE_BUILD_TYPE MATCHES Release)
|
|
# Let Ant create the unsigned apk file
|
|
add_custom_command(TARGET ${ANDROID_NAME}
|
|
COMMAND ant release
|
|
WORKING_DIRECTORY "${apk_directory}")
|
|
|
|
# Sign the apk file
|
|
add_custom_command(TARGET ${ANDROID_NAME}
|
|
COMMAND jarsigner -verbose -keystore ${ANDROID_APK_SIGNER_KEYSTORE} bin/${ANDROID_NAME}-unsigned.apk ${ANDROID_APK_SIGNER_ALIAS}
|
|
WORKING_DIRECTORY "${apk_directory}")
|
|
|
|
# Align the apk file
|
|
add_custom_command(TARGET ${ANDROID_NAME}
|
|
COMMAND zipalign -v -f 4 bin/${ANDROID_NAME}-unsigned.apk bin/${ANDROID_NAME}.apk
|
|
WORKING_DIRECTORY "${apk_directory}")
|
|
|
|
# Install current version on the device/emulator
|
|
if(ANDROID_APK_INSTALL OR ANDROID_APK_RUN)
|
|
add_custom_command(TARGET ${ANDROID_NAME}
|
|
COMMAND adb install -r bin/${ANDROID_NAME}.apk
|
|
WORKING_DIRECTORY "${apk_directory}")
|
|
endif()
|
|
else()
|
|
# Let Ant create the unsigned apk file
|
|
add_custom_command(TARGET ${ANDROID_NAME}
|
|
COMMAND ant debug
|
|
WORKING_DIRECTORY "${apk_directory}")
|
|
|
|
# Install current version on the device/emulator
|
|
if(ANDROID_APK_INSTALL OR ANDROID_APK_RUN)
|
|
add_custom_command(TARGET ${ANDROID_NAME}
|
|
COMMAND adb install -r bin/${ANDROID_NAME}-debug.apk
|
|
WORKING_DIRECTORY "${apk_directory}")
|
|
endif()
|
|
endif()
|
|
|
|
# Start the application
|
|
if(ANDROID_APK_RUN)
|
|
add_custom_command(TARGET ${ANDROID_NAME}
|
|
COMMAND adb shell am start -n ${ANDROID_APK_PACKAGE}/android.app.NativeActivity)
|
|
endif()
|
|
endmacro(android_create_apk name apk_directory libs_directory assets_directory) |