测试环境Android 11?
如下为一般android studio的工程目录及文件。 目标:使用了官方android SDK中未包含的api&class,而且需要在android studio及aosp中编译通过。 方法:
- 在aosp中编译时,需要注意在Android.mk中添加LOCAL_PRIVATE_PLATFORM_APIS := true(如果是使用Android.bp, 则添加platform_apis: true)
- 在AS中编译时,需要在app中放置包含有aosp私有或者隐藏的api&class的jar包;这个jar其实就是由aosp/framworks/base/中的code编译而来,本文中对应framework-all.jar,编译出来的路径为:out/soong/.intermediates/frameworks/base/framework-all/android_common/combined/framework-all.jar,不同的android版本可能对应不同的路径及文件名,详细参考frameworks/base/Android.bp(或Android.mk)。有了jar包后就继续调整build.gradle。
外层build.gradle调整如下(Line:29 ~ 34):
24 allprojects {
25 repositories {
26 google()
27 jcenter()
28 }
29 // To use hidden apis & internal apis
30 gradle.projectsEvaluated {
31 tasks.withType(JavaCompile) {
32 options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework-all.jar')
33 }
34 }
35 }
内层build.gradle调整如下(Line:26-27):
25 dependencies {
26 // implementation fileTree(dir: 'libs', include: ['*.jar'])
27 compileOnly files('libs/framework.jar')
28 implementation 'com.google.android.material:material:1.4.0'
29 implementation 'androidx.cardview:cardview:1.0.0'
30 implementation 'androidx.recyclerview:recyclerview:1.2.1'
31 implementation 'androidx.leanback:leanback:1.0.0'
32 implementation 'androidx.leanback:leanback-preference:1.1.0-rc01'
33 }
之后,再重新gradle sync, build就可以编译通过了。
|