Как использовать библиотеку Android с нативной библиотекой в ​​качестве зависимости для 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 () с файлами.so не поддерживается. Используйте ignore_native_libraries = true, чтобы отключить эту ошибку.

Отсюда: 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: мне пришлось изменить имена целей и заменить "-" на "_" из-за ошибки имени цели ("-" не поддерживается).

1 ответ

Решение

Вам нужно изменить android_aar_prebuilt в //build/config/android/rules.gni скопировать соответствующий .so файлы в каталог сборки (root_build_dir).

Затем вам нужно добавить зависимость от цели AAR к вашему android_apk цель непосредственно. Наконец, также добавьте .so файлы в вашем каталоге сборки на loadable_modules директива android_apk (это критично).

Справочник GN - ваш друг.

Согласно документации, приведенной здесь:https://chromium.googlesource.com/chromium/src/build/config/+/master/android/rules.gni

Разве не поддерживается.aar с.so?

Другие вопросы по тегам