Android 构建常见问题
构建机的默认 JDK 版本是 1.8 而 Android 程序需要 JDK 11+
使用自定义构建节点,安装构建节点前先安装好 JDK11。这样
qci_worker
启动 Jenkins 会使用 JDK 11 启动。参考 Android (安卓) 构建时日志提示 SDK location not found··· 中解决方法,指定 docker 镜像作为构建环境。
Android (安卓) 构建时日志提示 SDK location not found···
Android (安卓) 构建时,日志如下图所示提示 SDK location not found.Define location with an ANDROID_SDK_ROOT environment variable or by setting the sdk.dir path in your project's local properties file at '/root/workspace/local.properties'.
。
该问题一般是由于使用了镜像构建(如 openjdk 11)等没有 Android 环境导致的,可以在镜像挂载 Android 环境进去。添加参数如下:
-v /root/programs/:/root/programs/ -e ANDROID_HOME=/root/programs/android-sdk
自动化构建使用 java-android 模板,报错 uninitialized keystore
java.security.KeyStoreException: Uninitialized keystore 错误通常表示在尝试访问或操作密钥库之前,密钥库没有正确初始化。这可能是由于多种原因,例如使用了错误的密钥库类型、密码不正确或文件损坏。为了解决这个问题,请按照以下步骤操作:
检查证书 alias,密码等填写是否正确,凭据是否上传 p12 后缀证书。
确保您在 Linux 上使用的是正确的密钥库类型。对于 P12 证书,您需要指定密钥库类型为 PKCS12。在使用 keytool 时,可以通过添加 -storetype PKCS12 参数来指定密钥库类型。例如:
keytool -list -v -keystore my-release-key.p12 -storetype PKCS12
确保您使用的是正确的密码。在访问密钥库时,您需要提供正确的密码。如果您忘记了密码,可能需要重新生成一个新的证书。检查证书文件是否在传输过程中损坏。您可以尝试在 Linux 上使用 keytool 查看证书信息,以确保文件没有损坏。如果文件损坏,您需要重新生成或导出证书。
确保您使用的 Java 版本和 keytool 版本是兼容的。在某些情况下,不同版本的 Java 可能会导致兼容性问题。您可以使用
java -version
和keytool -version
命令来检查您的 Java 和 keytool 版本。如果需要,您可以尝试更新 Java 或使用与您的证书兼容的版本。检查证书是否是在 linux 平台生成的,不同系统的证书可能也会导致兼容性问题。
通常情况是由于,持续集成公共的 Jenkins 是用使用 JDK 1.8 启动的,而证书签名插件初始化需要使用 JDK 11+。
解决方案一:使用自定义构建节点,安装构建节点前先安装好 JDK11。这样 qci_worker 启动 Jenkins 会使用 JDK 11 启动。
解决方案二:在 gralde 中配置好签名命令直接签名。
解决方案三:使用命令手动签名。
stage('APK 签名') {
agent {
docker {
reuseNode "true"
registryUrl "https://coding-public-docker.pkg.coding.net"
image "public/docker/openjdk:11-2022"
args "-v /root/programs/:/root/programs/ -e ANDROID_HOME=/root/programs/android-sdk"
}
}
steps {
sh """
java -jar /root/programs/android-sdk/build-tools/28.0.3/lib/apksigner.jar sign --ks java-android.p12 --ks-type pkcs12 --ks-pass pass:oliverkahn01 --out app/build/outputs/apk/release/app-release-signed.apk app/build/outputs/apk/**/*.apk
"""
}
}
--out app/build/outputs/apk/release/app-release-signed.apk
:签名后重命名的apk。
--ks java-android.p12
:这里要把 p12 证书拉取到构建环境,比如放代码仓库,或者放在 generic 仓库拉取过来。
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。