adb将Apk内置到系统中(system/priv-app)
https://blog.csdn.net/starhosea/article/details/78697007
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
版权声明:本文为博主原创文章,转载请附上博文链接!
adb将Apk内置到系统中(system/priv-app)的更多相关文章
- 手把手教你使用ADB卸载手机内置App软件
[一.前言] 不知道你们有没有那么一段黑暗时期,刚买个手机,手机上内置一堆app,还卸载不掉,然后每天各种广告,手机一共1G的运行内存,那些流氓app还要再占走一些内存,真是让人欲哭无泪啊,后来我就学 ...
- JDK内置日志系统
1.Java应用中的日志功能 ================= 一般的Java应用程序中都有记录日志的需求,目前主流的记录日志的方法是在应用程序中引入log4j,用log4j来生成日志.其实,JDK ...
- Systemd初始化进程/RHEL 6系统中System V init命令与RHEL 7系统中systemctl命令的对比
Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程.初始化进程作为Linux系统的第一个进程,它需要完成Li ...
- Android:源码环境下移植第三方的apk内置到ROM(System Image)中
1. 首先在vendor目录下新建一个the3rdapk的目录,将需要内置的apk丢进去,目录名自己随意定. 2. 在 build/target/product/common.mk最后面,在$(cal ...
- 第三方apk内置因签名导致SystemUI未启动启动问题案例分析
这个问题是刷完机正常开机后,发现手机无状态栏,下拉通知栏,按音量键也无法出现VolumeDialog,开始看到这个现象感觉是systemUI未编译到版本中去?或者是在systemserver中syst ...
- windows10开启内置ubuntu系统,使用xshell连接
windows安装配置ubuntu系统内置子系统 官方文档:https://docs.microsoft.com/zh-cn/windows/wsl/about https://www.jianshu ...
- JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门
2 JSP内置标签(美化+业务逻辑) 1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容 2)JSP内 ...
- 框架(yii和thinkphp)中实例化php内置或者扩展中的对象问题
将php原生语句实例化SphinxClient对象移植到yii2框架中报错 原生语句中这样写: $s = new SphinxClient(); 框架中应该加入反斜杠,这样写: $s = new \S ...
- 内置组件 && vue中强大的缓存机制之keep-alive
vue中强大的缓存机制之keep-alive 最近在用vue做项目,在切换页面时发现切换回原来的页面无法保存原来的状态. 如A页面需要ajax请求数据,然后切换到B页面做某些事情,再切换回A页面时,A ...
随机推荐
- 生产环境跑PHP动态程序
Nginx + PHP5(FastCGI)生产环境跑PHP动态程序可超过“700次请求/秒” 我生产环境下的两台Nginx + PHP5(FastCGI)服务器,跑多个一般复杂的纯PHP动态程序, ...
- sqlserver字段选择参照
SQL SERVER提供的说明. bit:0或1的整型数字 int:从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 smallint:从-2^15( ...
- 【leetcode】1234. Replace the Substring for Balanced String
题目如下: You are given a string containing only 4 kinds of characters 'Q', 'W', 'E' and 'R'. A string i ...
- Flink SQL 如何实现数据流的 Join?
无论在 OLAP 还是 OLTP 领域,Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句.对于离线计算而言,经过数据库领域多年的积累,Join 语义以及实现已经十分成熟,然而对于近年来刚 ...
- Documents.Open返回值为null
上个月出现的一个问题,将解决方法记录一下~ [问题]无法通过SAP系统外部OS命令(SM69)执行OS服务器上Powershell文件对Office文档的相关命令操作(打开文档等命令). [现象]执行 ...
- BZOJ 2117: [2010国家集训队]Crash的旅游计划 动态点分治+二分
感觉现在写点分治可快了~ 二分答案,就可以将求第 $k$ 大转换成一个判断问题,直接拿点分树判断一下就行了. #include <cstdio> #include <vector&g ...
- python中oepen及fileobject初步整理之划水篇
open选项 参考官方文档,很多东西也没有看懂,将自己理解的部分先整理到这里,以后还是要参阅官方文档的. open (file, mode='r', buffering=-1, encoding=No ...
- 【BZOJ4552】排序(线段树,二分)
题意:给定一个n个数的排列,有m次操作:op,l,r op=0时表示将位置[L,R]升序排序 op=1时表示将位置[L,R]降序排序 最后询问第q个位置上的数字 n,m,q<=1e5 思路:Fr ...
- @transient 注解 和 transient变量的作用
@transient 和 transient是两码事 1.@transient的作用 @transient是hibernate和Morphia中的注解,hibernate都熟悉,Morphia是通过同 ...
- koa2,koa-jwt中token验证实战详解
用户身份验证通常有两种方式,一种是基于cookie的认证方式,另一种是基于token的认证方式.当前常见的无疑是基于token的认证方式.以下所提到的koa均为koa2版本. token认证的优点是无 ...