问题描述
我在 Android Studio 中构建我的项目并生成签名的 apk,然后将我的 apk 放在 Android 开源项目中以将我的应用程序与系统映像打包。
我跟着 these steps 用系统映像打包我的应用程序。
我的问题是 Android.mk
:
LOCAL_CERTIFICATE := < desired key >
如果我不签署apk并使用
LOCAL_CERTIFICATE := platform
一切顺利,构建成功
但如果我签署我的 apk 并使用
LOCAL_CERTIFICATE := PRESIGNED
我的构建失败并出现错误 1:
make: *** [out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk] Error 1
对于详细日志,我使用 make showcommands
创建项目,这就是发生错误的地方:
mv out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk.unaligned
out/host/linux-x86/bin/zipalign -f -p 4 out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk.unaligned out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk.aligned
make: *** [out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk] Error 1
所以问题是 zipalign!构建系统不应将 zipalign 用于已签名的 apk,但为什么要使用它?
我的完整 Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyApp
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := false
LOCAL_MODULE_PATH := $(TARGET_OUT)/preinstall
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_SRC_FILES := my_app.apk
LOCAL_PRIVILEGED_MODULE = true
LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
include $(BUILD_PREBUILT)
解决方法
mv out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk.unaligned
out/host/linux-x86/bin/zipalign -f -p 4 out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk.unaligned out/target/product/helpera64-v2/ obj/APPS/MyApp_intermediates/package.apk.aligned
make: *** [out/target/product/helpera64-v2/obj/APPS/MyApp_intermediates/package.apk] 错误 1
从错误日志来看,zipalign
命令执行失败,所以潜在的失败原因是你的apk有错误的align
。也许您可以按照 Android's zipalign 文档来确保您的 apk 具有正确的 align
。
PS:我遇到过类似的问题,因为预签名的 apk 有错误的 align
so 文件。