Skip to content

Commit 6dd6566

Browse files
committed
Android: Review APK naming, config and signing
Separate signing configuration from release vs. debug configuration. Use 'dev' APK ID suffix for all builds with non standard version display string. Update instructions for manual signing. Last not least, always copy the APK to the standard file path where the regular CPack generators put the output.
1 parent 3942328 commit 6dd6566

File tree

4 files changed

+36
-23
lines changed

4 files changed

+36
-23
lines changed

android/CPackConfig.cmake.in

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,16 @@ set(CPACK_GENERATOR "")
2626
set(destdir "@CMAKE_CURRENT_BINARY_DIR@/Mapper/install")
2727

2828
set(final_message )
29-
set(KEYSTORE_URL "@KEYSTORE_URL@")
30-
set(KEYSTORE_ALIAS "@KEYSTORE_ALIAS@")
29+
30+
set(apk "${destdir}/build/outputs/apk/")
31+
if(@RELEASE_APK@)
32+
set(config "CONFIG+=release")
33+
set(apk "${apk}/release/install-release" )
34+
else()
35+
set(config "CONFIG+=debug")
36+
set(apk "${apk}/debug/install-debug" )
37+
endif()
38+
3139
set(SIGN_APK "@SIGN_APK@")
3240
if(SIGN_APK AND "@CMAKE_HOST_UNIX@")
3341
execute_process(COMMAND "${CMAKE_COMMAND}" -E echo "Checking if we are running in a terminal")
@@ -38,19 +46,20 @@ if(SIGN_APK AND "@CMAKE_HOST_UNIX@")
3846
set(SIGN_APK 0)
3947
endif()
4048
endif()
49+
4150
if(SIGN_APK)
42-
set(config "CONFIG+=release")
43-
set(sign --sign "${KEYSTORE_URL}" "${KEYSTORE_ALIAS}")
51+
set(sign --sign "@KEYSTORE_URL@" "@KEYSTORE_ALIAS@")
52+
set(apk "${apk}-signed.apk" )
4453
else()
45-
set(config "CONFIG+=debug")
4654
set(sign )
47-
$<@SIGN_APK@:
48-
# APK signing enabled at configuration time, but disabled at build time.
55+
if(@RELEASE_APK@)
56+
set(apk "${apk}-unsigned.apk")
57+
else()
58+
set(apk "${apk}.apk")
59+
endif()
4960
set(final_message "The build created an unsigned APK. To sign the APK, run:
50-
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore '${KEYSTORE_URL}' /path/to/install-release-unsigned.apk '${KEYSTORE_ALIAS}'
51-
zipalign 4 /path/to/install-release-unsigned.apk outfile.apk"
61+
apksigner sign --ks <keystore> --ks-key-alias <alias> ${apk}"
5262
)
53-
>
5463
endif()
5564

5665

@@ -92,8 +101,10 @@ execute_process(
92101
--deployment "bundled"
93102
--gradle
94103
--verbose
95-
$<$<OR:$<CONFIG:Release>,$<CONFIG:MinSizeRel>>:
104+
$<@RELEASE_APK@:
96105
--release
106+
>
107+
$<@SIGN_APK@:
97108
${sign}
98109
>
99110
WORKING_DIRECTORY "@CMAKE_CURRENT_BINARY_DIR@/Mapper"
@@ -103,13 +114,7 @@ if(result)
103114
message(FATAL_ERROR "Running androiddeployqt failed: ${result}")
104115
endif()
105116

106-
if(SIGN_APK)
107-
configure_file(
108-
"@CMAKE_CURRENT_BINARY_DIR@/Mapper/install/build/outputs/apk/install-release-signed.apk"
109-
"@PROJECT_BINARY_DIR@/@[email protected]"
110-
COPYONLY
111-
)
112-
endif()
117+
configure_file("${apk}" "@PROJECT_BINARY_DIR@/@[email protected]" COPYONLY)
113118

114119
if(final_message)
115120
message(STATUS "${final_message}")

android/Mapper.pro.in

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,8 @@ EXPECTED_VERSION = @Mapper_VERSION_MAJOR@\.@Mapper_VERSION_MINOR@\.@Mapper_VERSI
3131
error(The version name in AndroidManifest.xml does not match $$EXPECTED_VERSION.)
3232
}
3333

34-
CONFIG(debug, release|debug) {
35-
# Don't let (unsigned) debug packages replace (signed) release packages,
36-
# or the developer may loose maps.
34+
@USE_DEV_SUFFIX@ {
35+
# Don't let unstable packages replace official release packages.
3736
system(cp -a "$$ANDROID_PACKAGE_SOURCE_DIR" "$$OUT_PWD/")
3837
ANDROID_PACKAGE_SOURCE_DIR = $$OUT_PWD/android
3938
system(sed -e $$shell_quote(/<manifest/ s/org.openorienteering.mapper/org.openorienteering.mapper.dev/) -i -- "$$ANDROID_PACKAGE_SOURCE_DIR/AndroidManifest.xml")

ci/azure-pipelines.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ jobs:
124124
- $(TARGET)-toolchain-$(openorienteering.superbuild.ndkVersion)
125125
- toolchain-info-$(TARGET)
126126
- android-libcxx-armeabi-v7a-$(openorienteering.superbuild.ndkVersion)
127-
outputFilter: packaging/Mapper/install/build/outputs/apk/*/*.apk
128127
- template: publish.yml
129128

130129

packaging/CMakeLists.txt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,20 @@ elseif(ANDROID)
189189
"Alias in the keystore to be used when signing APK packages."
190190
)
191191
if(KEYSTORE_URL AND KEYSTORE_ALIAS)
192-
set(SIGN_APK "$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>")
192+
set(SIGN_APK 1)
193193
else()
194194
set(SIGN_APK 0)
195195
endif()
196+
if("@CMAKE_BUILD_TYPE@" MATCHES "Rel")
197+
set(RELEASE_APK 1)
198+
else()
199+
set(RELEASE_APK 0)
200+
endif()
201+
if("${Mapper_VERSION_DISPLAY}" STREQUAL "${Mapper_VERSION}")
202+
set(USE_DEV_SUFFIX "false")
203+
else()
204+
set(USE_DEV_SUFFIX "true")
205+
endif()
196206
configure_file(
197207
"${PROJECT_SOURCE_DIR}/android/CPackConfig.cmake.in"
198208
"${PROJECT_BINARY_DIR}/CPackConfig.tmp.cmake"

0 commit comments

Comments
 (0)