安卓系统源码如何导入原生androidx资源文件?
目录
- 一、问题
- 二、解决思路
- 三、最终措施
一、问题
在安卓原生的SystemUI下增加资源文件,xxx.xml文件,此xml文件引用了
androidx.cardview.widget.CardView
控件,不做其他修改,编译,报错:找不到CardView相关的控件。
二、解决思路
打开SystemUI下的Android.bp文件,这里写着SystemUI是如何编译出来的,并且引入了哪些库。
android_app {
name: "SystemUI",
static_libs: [
"SystemUI-core",
],
resource_dirs: [],
SystemUI引入了SystemUI-core 静态库,
android_library {
name: "SystemUI-core",
srcs: [
"src/**/*.kt",
"src/**/*.java",
"src/**/I*.aidl",
],
resource_dirs: [
"res-keyguard",
"res",
],
static_libs: [
"CH34xUARTDriver",
"SystemUIPluginLib",
"SystemUISharedLib",
"SettingsLib",
"androidx.legacy_legacy-support-v4",
"androidx.recyclerview_recyclerview",
"androidx.preference_preference",
"androidx.appcompat_appcompat",
"androidx.mediarouter_mediarouter",
"androidx.palette_palette",
"androidx.legacy_legacy-preference-v14",
"androidx.leanback_leanback",
"androidx.slice_slice-core",
"androidx.slice_slice-view",
"androidx.slice_slice-builders",
"androidx.arch.core_core-runtime",
"androidx.lifecycle_lifecycle-extensions",
"androidx.dynamicanimation_dynamicanimation",
"androidx-constraintlayout_constraintlayout",
"iconloader_base",
"SystemUI-tags",
SystemUI-core 包括了如上那么多的资源库,发现一个问题:
并没有看到cardview相关的资源
大概能够知道肯定要添加androidx.cardview
等相关的字眼,可是具体添加哪个呢?
类比的思想,通过grepandroidx.recyclerview_recyclerview
找到了它的声明定义地方:
prebuilts/sdk/current/androidx/Android.bp
同样在此bp文件下我们也找到了cardview
相关的字眼:
android_library {
name: "androidx.cardview_cardview",
sdk_version: "current",
min_sdk_version: "14",
manifest: "manifests/androidx.cardview_cardview/AndroidManifest.xml",
static_libs: [
"androidx.cardview_cardview-nodeps",
"androidx.annotation_annotation",
"androidx.core_core",
],
java_version: "1.7",
}
cardview 真正实现的地方又在哪里?
路径:
prebuilts/sdk/current/androidx/m2repository/androidx/cardview/cardview/1.1.0-alpha01
ls看一下:
不难看出,cardview 、recyclerview等等各种androidx视图,在安卓系统源码下是一个已经封装好的jar、arr等资源文件。
三、最终措施
SystemUI下的Android.bp文件下,引入androidx.cardview_cardview
资源即可!