如何将 android 库与本机库一起用作 Chromium 的依赖项?

How to use android library with native library as dependency for Chromium?

我正在努力将一些库(aar 包含本机库 (.so))集成到 Chromium(更详细的 Snapdragon 优化分支)中。

为了在 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 时出现错误:

android_aar_prebuilt() with .so files is not supported. Use ignore_native_libraries = true to silence this error.

它来自这里: https://chromium.googlesource.com/chromium/src/build/config/+/master/android/rules.gni#2817

assert(_ignore_native_libraries || !_scanned_files.has_native_libraries, ...

是否有可能将 aar 与本机库一起使用,一些解决方法或修改 rules.gni?如果我必须自己添加支持 - 我应该编辑 rules.gni 并添加从解压缩的 aar 复制的本机库到目标目录(这似乎很简单)?

更新 1:由于目标名称错误(不支持“-”),我不得不更改目标名称并将“-”替换为“_”。

您需要修改 //build/config/android/rules.gni 中的 android_aar_prebuilt 以将适当的 .so 文件复制到构建目录 (root_build_dir) 中。

然后您需要将对 AAR 目标的依赖项直接添加到您的 android_apk 目标。最后,还要将构建目录中的 .so 文件添加到 android_apkloadable_modules 指令中(这很关键)。

GN Reference是你的朋友。

根据此处提供的文档: https://chromium.googlesource.com/chromium/src/build/config/+/master/android/rules.gni#4119

不支持 .aar 和 .so 吗?