早期Android 4.4 等版本预置APK的时候需要主动提取APK中的相关lib进行编译预置。
新Android版本 例如O8.0,可以编译预置不需要进行此操作,ROM装载的时候,会自动提取lib.
相关预置方式MTK Eservice.例如https://online.mediatek.com/FAQ#/SW/FAQ13232 [FAQ13232] L 预置apk都有提及,可以先查阅相关内容,以下是我针对APK预置的时候多少还是碰到的一些问题提出的解决尝试方案。
1 拿到预置的APK 首先直接进行adb APK安装 确认APK功能是否OK.
如果可以直接安装,一般就没有大问题,注意相关预置问题即可;如果不能安装,根据命令行提示解决相关报错。
普通预置方式
include $(CLEAR_VARS)
LOCAL_DEX_PREOPT:=false
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := bestpay
LOCAL_SRC_FILES := ./bestpay.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/operator/app
include $(BUILD_PREBUILT)
1)LOCAL_DEX_PREOPT:=false #是否进行odex优化,部分第三方APK进行odex提取优化,可能预置失败,如果预置运行报错,可以首先关闭此项验证
2) LOCAL_CERTIFICATE := PRESIGNED #签名,部分第三方APK给到没有进行签名,这种APK安装的时候就会报Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES],需要我们签上系统的名,LOCAL_CERTIFICATE := platform
3)LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/operator/app #安装位置请根据客户需求是否可以用户卸载应用注意调整。因为系统区域我们可以跟随ROM FOTA同步升级;用户区域后期无法跟随FOTA同步升级(FOTA升级不会动usedata区域)。
2 部分APK在使用以上预装方式且调整相关选项可能还是预置后还是无法正常使用。
1)请先使用ADB 的方式,在需要预置APK位置的目录下创建相关目录,pushAPK到此目录进行功能验证,如果OK。Android.mk就去除相关编译部分,直接采用拷贝模式
$(shell mkdir -p $(TARGET_OUT_VENDOR)/app/FreemeVAssistant)
$(shell cp $(LOCAL_PATH)/FreemeVAssistant.apk $(TARGET_OUT_VENDOR)/app/FreemeVAssistant)
2 )push方式APK可能没有办法正常解析加载相关库文件,如果APK含有相关lib文件,需要主动拷贝到push的文件目录的等级位置(lib/arm,目录具体位置可以在out目录下面查看系统文件编译生产的时候APK下面的目录结构)
$(shell mkdir -p $(TARGET_OUT_VENDOR)/app/FreemeVAssistant/lib/arm)
$(shell cp -rf $(LOCAL_PATH)/FreemeVAssistant/lib/armeabi-v7a/* $(TARGET_OUT_VENDOR)/app/FreemeVAssistant/lib/arm)
ps:关于选择如何选择需要的APK lib类型
armeabi就是针对普通的或旧的arm cpu
armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu
• mips / mips64: 极少用于手机可以忽略
• x86 / x86_64: x86 架构的手机、平板、模拟器用得比较多/64位的平板
• armeabi: ARM v5 这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈,第5代、第6代的ARM处理器,早期的手机用的比较多。
• armeabi-v7a: ARM v7 目前主流版本,第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它。
• arm64-v8a: 64位支持,第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
查看当前手机CPU类型
adb shell cat /proc/cpuinfo
processor : 0
Processor : ARMv7 Processor rev 4 (v7l)
3 最后注意编写完Android.mk后不要忘了
打开文件 device\mediatek\common\device.mk
将 LOCAL_MODULE := bestpay 定义的 bestpay添加到 PRODUCT_PACKAGES 里面。
PRODUCT_PACKAGES += Test
欢迎指正沟通