手机上开发Android车机应用一 预制系统apk手机开发「手机上开发Android车机应用一 预制系统apk」
书接上回,在我的Pixel上刷上车机系统后,准备开发一个系统预制的ROOT权限的应用。
暂时设计了如下几个功能,目前每天下班回家开发一点,已经写了两个页面:
设备信息
APP信息
调试功能
信号模拟
文件浏览
网络交互
想要设计的功能全部开发完毕,需要提升至系统权限,甚至ROOT权限,再修改系统源码配合。
这个全部走完战线比较长,所以现在先研究下如何让自己的apk获取系统权限,集成到系统里,成为不可卸载的预制应用。废话不多说,直接开始本篇主题。
应用想要系统权限,必须以系统的签名文件进行签名。我们的源码在wsl子系统里,接下来说明下如何在源码目录里找到制作系统签名的源文件。
WSL制作jks文件
目前我的app还是采取直接run到设备上进行开发的,想将其预制到系统里。我们先测试下其是否可以直接使用系统签名文件进行签名。首先需要手动制作对应aosp源码系统里的签名文件,不同版本可能不尽相同。
这一步网上教程很多,我们有源码就会更加方便,直接切换到目标目录下进行操作。
其中应该有如下文件:
第一,生成platform.pem文件
第三,就是生成jks签名文件了。其中-deststorepass后也会用到上一步设置的password字段。
验证platform权限
为了知道是否成功获取系统权限,我们以一个高阶窗口的形式来测试。普通应用想要申请高阶窗口来显示应用,最高只有1999,即应用内部各类窗口,子窗口,最高只能到1999的type层级。
从下面的第一个开始:
2000以上就属于系统窗口,想要使用必须要有系统权限。
比如我们普通应用里设置一个,运行后就会报错:
下面实践开始,封装一个WindowManager类,简单地设置type,添加view:
两种方式可供选择:
一种是直接将app的源码一起放到系统源码里,和系统一起集成。
一种是放置apk到系统源码,添加mk文件,再一起集成。
第二种方式比较通用,后期也能和伙伴一起玩,开发各种不同应用集成到一个系统里,就像新手机的那些提前装好的广告软件一样。
我采取的也是第二种方法,直接将编译好的apk放置到系统目录下。
打包apk 编写mk文件
我习惯采用命令行直接使用gradlew脚本的方法来打包,AS的terminal输入:
首先需要集成的应用包都在packages/apps/下面,想要新增app的话,需要mkdir创建一个新的文件夹,我的手机上就是RedfinDemo/
Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成(exe,so,a,jar,apk)等文件。其格式一般比较固定,以我的makefile文件为例:
备注,不同安装路径的含义:
我们在packages/apps下新增了模块,配置了模块的mk文件,那么AOSP系统源码编译时也需要知道这个文件夹是新来的,下次编译时要带带他。我们需要找到这个系统模组的mk文件,并修改它,加上一个RedfinDemo即可:
首先切到,查看内容列表
打开后,第一个项目就是,这里就是参与编译的各个模组了,我们在这个条目的最后追加新建的模组。
按 I 进入编辑模式,编辑完成,按下esc,输入,保存即可
到aaos根目录,依然是上次的那几条编译指令:
Google采取了增量编译的方案,这个小改动,在我的电脑上只需要一分钟就编完了,将新的编译产物刷写到Pixel上。然后remount成功后推送vendor下的文件,等待设备重启。
这次信心满满的配置编译之后,却发现系统虽可以执行adb root,却无法remount,一直黑屏,adb remount提示:
可以通过AS看日志,了解到系统其实已经起来了,看我们RedfinDemo的logcat,循环显示
这就是为什么,系统工程师在集成新apk时,或者有新增权限时,都会要求应用开发者要将自己所有的权限都提前告知,他们才能配置,否则系统编出来就是废的。
需要解决这个问题,我们需要给RedfinDemo单独配置其所需的权限,相关的文件就在如下目录,可以打开后直接按照其他应用的格式进行配置。
由于我想自己的应用已经拿到系统权限了,所以应该不用单独在manifest里声明权限,但是这个猜测还没求证。故为了当晚可以顺利集成我的apk,我是直接把应用manifest里声明的权限都删除了,重新打了一个apk,放到apps目录,在make起编,最后刷写的。后面我再去单独验证这个权限文件的配置是否有效。
进入shell,查看系统应用目录,可以找到我们的RedfinDemo了,launcher上也有图标,表明已经成功集成。
launcher图标入口
第三方安装的应用,在系统自带的设置里,会有一个卸载按钮,如下某app所示:
而我们的RedfinDemo,是不可卸载的:
至此,我们成功地将一款外部应用打包进了系统目录下,有编制了。
最后汇报应用开发的进度,仍然是开始的那一些内容,在好友的建议下升级了app列表的UI,果真比之前好看太多了!
首页
app列表
下面的计划:
研究ROOT权限的获取,权限到手后,就是应用的开发居多了。
肯定也需要修改framework里的若干代码,来达到我的一些特殊需求。
另外,还会把一些很好用的工具按照这个方法,都打包到系统里。比如Android Terminal、Chrome、Auto.JS等,刷机前一起编进系统,就不用每次都单独来install了。
作者:Stephen10086
链接:https://juejin.cn/post/7317577665015185447
关注我获取更多知识或者投稿
海宁版权声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com