Android Framework应用定制开发

1.Android Framework定制API

1.1.增加API编译

一般增加Java API后会编译报错,根据如下提示执行(Android Q为例)

You have tried to change the API from what has been previously approved.

To make these errors go away, you have two choices:
   1. You can add '@hide' javadoc comments to the methods, etc. listed in the
      errors above.

   2. You can update current.txt by executing the following command:
         make api-stubs-docs-update-current-api

      To submit the revised current.txt to the main Android repository,
      you will need approval.
执行命令
make api-stubs-docs-update-current-api

1.2.生成系统签名文件keystore

(1)找到平台签名文件“platform.pk8”和“platform.x509.pem”

文件位置 android/build/target/product/security/

(2)把pkcs8格式的私钥转化成pkcs12格式:

openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt

(3)把x509.pem公钥转换成pkcs12格式

openssl pkcs12 -export -in platform.x509.pem -inkey     shared.priv.pem -out shared.pk12 -name xxx-androidkey

密码都是(根据需要自行定义):xxxandroid

(4)生成platform.keystore

keytool -importkeystore -deststorepass xxxandroid -destkeypass xxxandroid -destkeystore platform.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass xxxandroid -alias xxx-androidkey

最终在同一个目录下生成platform.keystore文件。

2.Android Studio应用适配

2.1.源码编译的framework.jar

android 系统应用二次开发的导入包,生成位置
./out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar

可以自行重命名为framework.jar

2.2.Android Studio引入源码编译的包

2.2.1.系统签名

(1)在 AndroidMainfest.xml 中显示添加系统权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ymf.demoapp"
    android:sharedUserId="android.uid.system">

(2)选择生成platform.keystore添加到android studio的Store File并填入密码
在这里插入图片描述

2.2.2.引入framework.jar

(1)将拷出来的jar文件命名为framework.jar或androidXX.jar,放在Module的libs下面

(2)右键framework.jar,选择“Add As Library”
原来无法索引的就会找到

2.2.3.编译调试

2.2.1.引入framework.jar后造成的超方法数
Caused by: java.lang.ArrayIndexOutOfBoundsException: 65535

或者

Execution failed for task ':app:mergeExtDexDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > java.lang.ArrayIndexOutOfBoundsException: Index 65535 out of bounds for length 61483

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

这个异常可以理解为,总函数数量超出java虚拟机的限制.

解决方案:修改framework.jar的编译方式
在build.gradle中将:implementation files(‘libs/framework.jar’)的引用方式更换为compileOnly files(‘libs/framework.jar’),不在Android Studio的选框里选择,因为没有这个选项!
后者的含义为只编译不集成进apk或者jar包中, 相当于编译的时候有framework.jar环境,但是却不会将framework.jar的相关引用编译进jar或者apk中.

2.2.2.引入framework.jar后还是默认索引的AS的android.jar

可以在模块的build.gradle中添加如下代码,就会优先索引framework.jar

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        Set<File> fileSet = options.bootstrapClasspath.getFiles()
        List<File> newFileList =  new ArrayList<>();
        //建议用绝对位置
        newFileList.add(new File("libs/framework.jar"))
        newFileList.addAll(fileSet)
        options.bootstrapClasspath = files(newFileList.toArray())
        //或者
        //options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')
    }
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值