Android Studio 工程导入 AOSP编译的 android.jar
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
使用场景
1.需要使用 framework 中的 @SystemApi 文件或者 @hide 的 API 接口
2.定制 Framework 层业务即有 客制化 的 API 接口
补充知识点
1.framework 源码即 AS 工程目录中 External Libraries 下的 < Android API xx Platform > 下的原生 SDK 的 android.jar
所在路径Sdk\platforms\android-29\android.jar
2.compileSdkVersionAS 本地开发环境中的 依赖的 sdk 编译版本即决定了 < Android API xx Platform > 中 xx 的值如 < Android API 29 Platform >
3.targetSdkVersionAPP版本开发中的适配版本
4.buildToolsVersion工程的构建工具版本即 Gradle 版本
备注
以下内容使用的 framework.jar 为个人源码编译得的才有其中的如 SystemProperties 类。
目录
实际场景
如上图所示当我们在项目中使用一些 @SystemApi 文件或者 @hide 接口时直接使用工程中 Gradle 为我们加载的 sdk 中 android.jar 时会出现无法使用的异常报错这将导致无法正常编译或者哪怕你做的是系统应用开发可以使用源码正常编译但整个工程都是红色提示这也会愁死那些有强迫症的码农。
那么解决方案就来了如何正常使用它或者消除红色提示呢
导入离线 android.jar
这边以原生 sdk 中的 30 android.jar 为例客制化的平台 源码编译 的 framework 包请注意注释
配置 jar 包的优先级
-
将工程想要依赖的 framework 包放置 app module 的 libs 下
dependencies { //Android N/O: //out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar //Android P/Q: //out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jar //Android R: //out/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/combined/framework-minus-apex.jar compileOnly files('libs/framework9.jar') // implementation files('libs\\framework30.jar') }
-
将其配置加载优先于原生 sdk 的 android.jar
Project 的 build.gradleallprojects { ...... gradle.projectsEvaluated {//Gradle 提供的生命周期回调方法所有project配置完成后调用 tasks.withType(JavaCompile) { options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework9.jar') } } }
其中需要注意的是以上配置必须配置在 allprojects 才会生效
做完以上配置之后就可以进行编译使用了
源码