我正在努力将一些包含本机库(aar
)的库(.so
)集成到Chromium中(Snapdragon优化的fork更详细)。
为了在Android代码中使用它,我必须修改chrome/android/BUILD.gn
并添加2个依赖项:
deps = [
...
"//third_party/libxyz_android:libxyz_android",
"//third_party/libxyz_android:libxyz_android_settings",
...
]
所以我必须创建third_party/libxyz
目录,在其中放置aar文件并创建BUILD.gn
:
import("//build/config/android/rules.gni")
android_aar_prebuilt("libxyz_android") {
aar_path = "libxyz-android-release.aar"
# proguard_configs = [ "src/proguard-gvr.txt" ]
ignore_manifest = true # Ignored because manifest merging is not supported (http://crbug.com/643967)
ignore_native_libraries = false
}
android_aar_prebuilt("libxyz_android_settings") {
aar_path = "libxyz-android-settings-release.aar"
ignore_manifest = true # Ignored because manifest merging is not supported (http://crbug.com/643967)
}
注意ignore_native_libraries = false
因为libxyz有本机库。
建造Chromium时出现错误:
不支持带.so文件的android_aar_prebuilt()。使用ignore_native_libraries = true来消除此错误。
它来自这里: https://chromium.googlesource.com/chromium/src/build/config/+/master/android/rules.gni#2817
断言(_ignore_native_libraries ||!_scanned_files.has_native_libraries,...
是否有可能将aar
与本机库,某些变通方法或修改后的rules.gni
一起使用?如果我必须自己添加支持 - 我应该编辑rules.gni
并添加从解压缩的aar
复制到目标目录的本机库(看起来很简单)吗?
更新1 :我必须更改目标名称并替换" - "到" _"因为目标名称错误(" - "不受支持)。
答案 0 :(得分:0)
您需要修改android_aar_prebuilt
中的//build/config/android/rules.gni
,将相应的.so
文件复制到构建目录(root_build_dir
)中。
然后,您需要直接向您的android_apk
目标添加对AAR目标的依赖关系。最后,还要将构建目录中的.so
文件添加到loadable_modules
的{{1}}指令中(这很关键)。
GN Reference是你的朋友。
答案 1 :(得分:0)
根据此处提供的文档: https://chromium.googlesource.com/chromium/src/build/config/+/master/android/rules.gni#4119
不支持.aar和.so吗?