当前位置:   article > 正文

Android11(R) 编译系统设置应用Settings_android11r

android11r

先倒一下苦水T_T

刚开始的时候在网上找了个编译的说明,也参考了一些,但是因此也走了一些弯路,花了一周多才编译通过,并打包成有系统权限的apk

为什么要编译系统应用呢,因为要定制android系统桌面,而有些接口被隐藏了,普通应用用不了。通过在源码中查找相关方法,发现系统应用可以用,于是就打算曲线救国,先把系统应用编译通过,然后再看能不能把相关的jar拿出来使用,毕竟以前只写过几个简单的android应用,对Android也不熟悉。如果熟悉的话可以直接把源码编译好的jar拿出来使用。

编译方法:

1、编译环境

       网上都建议使用eclipse编译,编译完成后再导入到android studio,但是我一直用android studio(后面用AS表示)开发,所以我想直接用AS,我刚开始使用的是最新的版本:Android Studio Electric Eel | 2022.1.1 Patch 1,这个版本默认的SDK是33,JDK版本是11,但是android11(R)使用的是SDK版本30,JDK版本是8。但是AS创建工程的时候是不能指定编译版本的,只能指定最低编译版本,就算只留30的SDK,在创建工程的时候也会自动下载并使用最新的SDK。在降编译版本这块花了好大的力气也没有降成功,还有Gradle版本(现在对gradle版本还是很模糊)。所以打算按照网上说的用eclipse,下载好后发现eclipse最大支持的SDK版本是29,我把30的SDK拖进去也支持不了(哔了狗了)。又转战AS,先把当前的AS卸载了,重新下载了个AS4.1的版本(大于3.3都行)主要是查了一下发布时间,然后选了4.1,下载网址:Android Studio 下载文件归档  |  Android Developers

JDK就选择8,至此编译环境准备好了

2、建工程

Setting的源码是./packages/apps/Settings(android系统源码中的位置)

在AS上创建一个No activity的工程,名称用Settings,包名用com.android.settings,要和原生的应用一样。替换Settings中的AndroidManifest.xml、src、res,res文件夹先删除掉原来,以防直接替换后还会有保留的。下来就可以开始编译了。

3、编译

  1. 资源文件(res)

最开始编译报错的地方是资源文件,这些是加载本地的。

strings.xml:包里面有很多是为了支持不同语言的可以只保留英文和中文的value和value-zh-rCN,这个都不是主要问题,string中product属性太难处理了, 在string.xml中会遇到name相同而product不同的字串如下所示,编译时就会报重复了,找了很多也不知道怎么处理,索性就先把不是default的给删掉了,据说eclipse没有这个问题(也因为这个想使用eclipse的...)
<string name="xxx" product="nosdcard">xxx</string>
<string name="xxx" product="default">xxx</string>

strings.xml处理完后,有大量的layout drawable values 等等xml文件需要从源码里面找,因为我们Google不了。这是一项非常庞大的工作,没技术含量,主要是慢,这些文件主要分布在下面文件夹,可以用命令:grep -rn "xxxx"来查找,是在找不到就直接删了或者找其他相似的代替。

frameworks/base/packages/SettingsLib/res
packages/apps/Settings/res
external/setupcompat
external/setupdesign

不要怕麻烦,不要怕麻烦,不要怕麻烦

        2.jar包

        单独编译jar包我没有编译过,我是把android编译了,编译出来的路径是

 out/target/commom/obj/JAVA_LIBRARIES/

需要引用的大部分jar都在这个文件夹中,需要哪个可以用grep查找,要是上面的路径找不到,那就在整个android源码文件夹中查找

下面是我找的,两个小红框中的不是在这个文件夹中绿框都是,整个大红框都是我加的。

修改的是build.gradle(Module:Settings.app)

 dependencies添加后还不算完,要保证添加的jar包优先系统SDK的使用,所以还要修改build.gradle和上面是一个文件

  1. andriod{
  2. ........//原来的代码,不变
  3. gradle.projectsEvaluated {
  4. tasks.withType(JavaCompile) {
  5. Set<File> fileSet = options.bootstrapClasspath.getFiles()
  6. List<File> newFileList = new ArrayList<>();
  7. //newFileList.add(new File("libs/android.jar"))
  8. newFileList.add(new File("libs/framework_intermediates/classes-header.jar"))
  9. newFileList.add(new File("libs/framework-minus-apex_intermediates/classes.jar"))
  10. newFileList.add(new File("libs/framework-wifi.com.android.wifi_intermediates/classes.jar"))
  11. newFileList.add(new File("libs/framework-tethering.com.android.tethering_intermediates/classes.jar"))
  12. newFileList.add(new File("libs/framework-statsd.com.android.os.statsd_intermediates/classes.jar"))
  13. newFileList.add(new File("libs/SystemUISharedLib_intermediates/classes.jar"))
  14. newFileList.add(new File("libs/SettingsLib_intermediates/classes.jar"))
  15. newFileList.add(new File("libs/SettingsLib_intermediates/SettingsLib-search.jar"))
  16. newFileList.add(new File("libs/core-libart.com.android.art.release_intermediates/classes.jar"))
  17. newFileList.add(new File("libs/core-icu4j.com.android.art.release_intermediates/classes.jar"))
  18. newFileList.add(new File("libs/core-oj.com.android.art.release_intermediates/classes.jar"))
  19. newFileList.add(new File("libs/Settings_intermediates/classes.jar"))
  20. newFileList.add(new File("libs/telephony-common_intermediates/classes.jar"))
  21. newFileList.add(new File("libs/setupcompat.jar"))
  22. newFileList.add(new File("libs/setupdesign.jar"))
  23. //最后将原始参数添加
  24. newFileList.addAll(fileSet)
  25. options.bootstrapClasspath = files(
  26. newFileList.toArray()
  27. )
  28. }
  29. }
  30. lintOptions {//也是为了解决一个什么问题加的,给忘掉了
  31. abortOnError false
  32. checkReleaseBuilds false
  33. disable 'MissingTranslation'
  34. }
  35. }

至此编译就可以通过了,然后就可以打包成apk,必要用系统签名,生成系统签名可以自行查找,有一点要注意的是生成签名时所用jkd的版本要和编译的jdk的版本一致

还没有在设备上运行,不知道编译是不是完全正确,等后面运行测试了在补充

编译的jar包:

Android11(R)编译的jar包-Android文档类资源-CSDN文库

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/458099
推荐阅读
相关标签
  

闽ICP备14008679号