首页文章手机上开发Android车机应用一 预制系统apk手机开发「手机上开发Android车机应用一 预制系统apk」

手机上开发Android车机应用一 预制系统apk手机开发「手机上开发Android车机应用一 预制系统apk」

时间2025-01-16 21:43:30发布yu分类文章浏览128
导读:书接上回,在我的Pixel上刷上车机系统后,准备开发一个系统预制的ROOT权限的应用。 暂时设计了如下几个功能,目前每天下班回家开发一点,已经写了两个页面: 设备信息APP信息调试功能信号模拟文件浏览...

书接上回,在我的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图标入口

c3b166ea304418a0683bcfc6cac5947d.jpeg

第三方安装的应用,在系统自带的设置里,会有一个卸载按钮,如下某app所示:

edb1bd9ac7db680697a9b557b97cda16.jpeg

而我们的RedfinDemo,是不可卸载的:

202f9fc9a15afa86ae5de33346d89d08.jpeg

至此,我们成功地将一款外部应用打包进了系统目录下,有编制了。

最后汇报应用开发的进度,仍然是开始的那一些内容,在好友的建议下升级了app列表的UI,果真比之前好看太多了!

首页

f961b8b1de88ecb14f89ec157d00687a.jpeg

app列表

f56b8ed2e8ebdbd504c9ada7140a3025.jpeg

下面的计划:

  • 研究ROOT权限的获取,权限到手后,就是应用的开发居多了。

  • 肯定也需要修改framework里的若干代码,来达到我的一些特殊需求。

另外,还会把一些很好用的工具按照这个方法,都打包到系统里。比如Android Terminal、Chrome、Auto.JS等,刷机前一起编进系统,就不用每次都单独来install了。

作者:Stephen10086
链接:https://juejin.cn/post/7317577665015185447

关注我获取更多知识或者投稿

4da77185ed6c509fff8c788a8450b19d.jpeg

阿勒泰版权声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com

展开全文READ MORE
手机开发预制车机
苹果和媒体怎么分开 苹果手机怎么把本地歌曲设置苹果怎么设置自己的歌「苹果和媒体怎么分开 苹果手机怎么把本地歌曲设置」 华为终于妥协:7000mAh大电量+鸿蒙系统+6.95英寸大屏,1549元!手机数码「华为终于妥协:7000mAh大电量+鸿蒙系统+6.95英寸大屏,1549元!」