需求:客户有两个供应商,我们是其中之一,然后客户想将我们的apk 用 另一家供应商的系统签名,安装到另一家供应商的设备上,另一家供应商提供了系统签名文件
用之前的方法 (platform.x509.pem platform.pk8客户提供的)
java -Xmx2048m -Djava.library.path=out/host/linux-x86/lib64 -jar out/host/linux-x86/framework/signapk.jar -w platform.x509.pem platform.pk8 aa.apk aasign.apk
签名成功
安装后提示报错
adb: failed to install aaasign.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed collecting certificates for /data/app/vmdl1711630767.tmp/base.apk: Failed to collect certificates from /data/app/vmdl1711630767.tmp/base.apk: Attempt to get length of null array]
因为在android12平台这个方法不试用了
我们用另一种办法
1 把签名文件放在build/target/product/security, device/qcom/qssi/key
2 将apk放在系统中,修改makefile
3 编译版本,编译出来的apk就是使用放入的签名文件签名的apk」
前提要有一套android12的代码
然后把客户提供的系统签名文件放在build/target/product/security, device/qcom/qssi/key
然后仿照高通的apk,把要签名的apk放到vendor/qcom/proprietary/prebuilt_HY11/target/product/qssi下面
修改这个路径下的Android.mk 和prebuilt.mk
include $(CLEAR_VARS) LOCAL_MODULE := aa LOCAL_MODULE_OWNER := qcom LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_CERTIFICATE := platform LOCAL_MODULE_SUFFIX := .apk LOCAL_SRC_FILES := ../../.././target/product/qssi/product/app/aa/aa.apk LOCAL_MODULE_PATH := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_PRODUCT)/app include $(BUILD_PREBUILT)」
然后编译这个apk
然后编译出来的文件,安装就可以了