博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
adb将Apk内置到系统中(system/priv-app)
阅读量:4653 次
发布时间:2019-06-09

本文共 1779 字,大约阅读时间需要 5 分钟。

so文件的处理是目前遇到过的问题。文章中解释了。

正文:

有时候我们在Android 系统内置自己的应用,在测试时,Android Studio 默认的安装方式是将我们开发的应用作为普通应用安装到系统中的。本文提供一种方式,在开发过程中,将apk内置到系统中,而不需要系统源代码。

adb 将apk内置到系统的方法很多人已经提到过了,但是大多都过时了,或者叙述不详细。下面的方式在我在 Android 7.1.1 测试通过

内置Apk的特权

Android 内置 apk 有如下特权:
1. 不能被普通用户卸载
2. 具有比普通应用更高的权限,可以使用受限的系统 API,
3. 结合某些 Manifest.xml 声明,可以实现更多效果,例如系统级保活
4. 可以声明 priority > 0 的 组件
(其他特权有待发现..)

准备apk

点击Android Studio 的 Build -> Build Apk(s) ,生成我们测试用的 apk。

如果你的 apk 带有 .so库,需要同时准备对应目标系统平台的 .so。我的测试机是 arm64-v8a,则我需要的 .so库 在工程的 app/build/intermediates/cmake/debug/obj/arm64-v8a/ 下。

清理旧的安装

之前测试过程中,你可能已经安装过apk到系统中,需要先卸载,不然有可能影响我们之后内置方式安装的apk的执行。

卸载方式一

通过手机自带软件管理卸载。这种比较简单了,不多说。

卸载方式二

通过adb卸载。
打开控制台,输入下面的命令卸载旧的安装

> adb uninstall <your package name>

1
例如我的报名是 com.star.test,我的完整卸载命令是

> adb uninstall com.star.test

1
看到控制台输出 SUCCESS 即表示卸载完成。

签名(可跳过)

如果我们的应用需要某些系统权限,可能需要使用系统签名,参考这篇文章为应用打上系统签名。

将应用Push到系统目录下

注: 以下命令运行可能报错 Read-only file system,解决该问题请参看 获取Android System 写入权限

推送apk到系统目录

输入如下名命令

> adb push <your apk path> /system/priv-app

1
Android 4.4 之后,系统核心apk安装在 /system/priv-app 中,以前是安装在 /system/app 中。

推送 .so 到系统库目录下

如果apk带有 .so 库,.so 库也需要单独push到 /system/lib 或者 /system/lib64 中,具体看你的系统有哪个目录。当然,.so 的ABI需要和系统ABI符合。

安装应用

在 Android 5.0 以前,推送到系统应用目录中的apk会被自动安装,Android 5.0 之后,只在系统启动时,系统会自动安装它。

确认有没有被实际安装,可以通过如下命令

> adb shell //进入adb shell 模式

# pm list packages | grep <your package name>//在所有已安装的apk中,查找指定的apk有没有安装
1
2
如果安装成功,则会有一行输出,显示自己的应用包名,否则不会有任何输出提示。

可以通过重启系统来使刚刚push进入的apk安装到系统中。如果完全重启系统的话,花费时间较长,可以通过部分重启来节省时间。在cmd中执行如下命令。

> abd shell//进入adb shell 模式

# am restart //重启系统(非完全重启)
1
2
重启之后正常情况下应用应该已经安装了,接下来测试下应用是否能能够工作。
---------------------
作者:Star丶Xing
来源:CSDN
原文:https://blog.csdn.net/starhosea/article/details/78697007
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/jdhdevelop/p/11226374.html

你可能感兴趣的文章
Entity Framework底层操作封装(3)
查看>>
python 全栈开发,Day37(操作系统的发展史)
查看>>
InputStream 转换 InputStreamReader再转换BufferedReader
查看>>
在线程池中的使用spring aop事务增强
查看>>
继续深入了解Cookie 和 Session
查看>>
再看《操作系统》--处理机管理
查看>>
亚马逊的负载均衡(Amazon Load Balancing)
查看>>
Java学习之Comparable与Comparator的区别
查看>>
微信小程序canvas把正方形图片绘制成圆形
查看>>
CentOS安装python-2.7+安装pip-10.0.0
查看>>
串行通信概念解析
查看>>
Sublime text 2之WIN7下安装Zencoding插件和使用
查看>>
python玩丢手绢问题,出局的顺序
查看>>
ASP:Checkbox验证非空的一种方法
查看>>
[CQOI2013]新Nim游戏 线性基
查看>>
我的成就故事
查看>>
electron-vue 更新 使用electron-update的版本
查看>>
设计模式_责任链模式
查看>>
HTTP请求中三种参数类型
查看>>
3DES加密/解密
查看>>