Android系统预装第三方apk
来源:互联网 发布:c语言编译器初学者 编辑:程序博客网 时间:2024/05/01 08:13
对于android系统预装第三方apk,分两种情况:
一、不包含so库的简单apk:
完全可以预装到system/app目录下(也就是系统app),运行时不会有找不到so库的错误;
二、包含so库的apk:
如果按照普通的apk一样预装到system/app目录(因为不做任何处理,一般都会预装到这个目录),则会报错:
java.lang.UnsatisfiedLinkError: Couldn't load libXXX from loader .........findLibrary returned null;
对于发生这种情况的原因是system app在系统启动加载时不会加载so;要解决这个问题,需要使第三方apk不是系统apk,下面就说说如何使第三方apk预装到data/app。
网上有用shell命令拷贝从源码目录拷贝到system/urs/apps的解决方法,可我对这些大长串的命令不熟悉,所以用mk文件结合shell命令来解决:
假设项目目录为:device/ha/product_name/,在此目录建立thirdparty目录。步骤如下:
1、将需要安装的第三方apk放到此目录,在thirdparty目录建立Android.mk文件:
include $(CLEAR_VARS)
LOCAL_MODULE := xx.apk
LOCAL_SRC_FILES := xx.apk
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := PRESET_APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT)/usr/apps
include $(BUILD_PREBUILT)
2、在当前目录创建从system/usr/apps目录拷贝到data/app目录的脚本文件copy_apk.sh(需要授权755即可):
#!/system/bin/sh
busybox cp /system/usr/apps/xx.apk data/app/
chmod 777 data/app/xx.apk
3、在第一步创建的mk文件中添加:
include $(CLEAR_VARS)
LOCAL_MODULE := copy_apk.sh
LOCAL_SRC_FILES := copy_apk.sh
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(TARGET_OUT)/bin
include $(BUILD_PREBUILT)
4、在device/ha/product_name/这个目录下找到并编辑init.product_name.rc文件,添加一个服务:
service copy_apk /system/bin/copy_apk.sh
class main
oneshot
大致思路:编译时将apk预装到system/usr/目录,开机启动时通过脚步将system/usr目录下的apk拷贝到data/app目录,这样系统启动时就会加载apk中so文件,从而不会报错。
做完以上几步编个版本升级或烧录后就能达到效果。
- Android系统预装第三方apk
- Android系统预装第三方apk
- android 预装第三方apk的方法
- android 预装第三方apk的方法
- 编译第三方APK进Android(预装APK)
- android第三方apk集成系统apk,Android.mk编写
- Android 系统添加第三方apk到data/app
- 怎把第三方apk编译进Android系统
- Android 系统添加第三方apk到data/app
- Android 系统添加第三方apk到data/app
- Android 系统添加第三方apk到data/app
- 将第三方apk变成系统apk
- 将第三方apk变成系统apk
- android获取应用信息_区分第三方预装软件
- android 预装apk脚本
- Android 增加第三方APK
- android添加第三方apk
- android APK 启动第三方APK
- 利 and、or 条件短路
- scrollview的滑动监听(自定义)
- 闲来无事话“事务”
- Java异常与异常处理
- 10.4 实现关系下的匿名内部类
- Android系统预装第三方apk
- 欢迎使用CSDN-markdown编辑器
- IOS APP间 互相唤醒 并传递文件
- 局部变量在栈中的存取
- CSS将边框border设定到宽度和高度中
- android studio 升级 gradle成最新的编译不成功
- Quartz Cron Expression 备忘
- 我对Hibernate缓存的认知
- webDriver爬取搜狗微信