Как построить AOSP Латинский IME из дерева? - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь создать AOSP Latin IME (исходный код: https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master) без загрузки всего исходного кода AOSP. В идеале я хотел бы построить проект как проект Gradle, чтобы я мог легко интегрировать егос моими существующими приложениями для Android.

Я уже добился некоторого прогресса, создав

1] создание пустого проекта в Android Studio

2], скопировав "java" и«java-overridable» папки и копирование и вставка содержимого папки «res» в мой проект

Однако во время компиляции проекта происходит сбой клавиатуры при открытии из-за следующей ошибки:

Не удалось загрузить нативную библиотеку jni_latinime

Эта ошибка имеет смысл, поскольку я не собрал и не включил нативную библиотеку C ++ (находится здесь: https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master/native/jni/), которая требуется для клавиатурыдля работы.

Как я могу собрать собственную библиотеку, найденную по ссылке выше, и включить ее в мой проект Gradle? Есть ли способ скомпилировать эти файлы C ++ беззагрузка всего исходного кода AOSP?

Проект поставляется с файлом "Android.bp", в котором, похоже, указано, как компилировать файлы C ++.К сожалению, я не могу понять, как использовать систему сборки Soong.https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/master/native/jni/Android.bp

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Колин создал отличную сборку Gradle для LatinIme. Я сделал измененную латиницу для своей дипломной работы и очень хотел, чтобы такой проект существовал тогда.

Если вы хотите изменить имя пакета приложения, вам также необходимо внести соответствующие изменения в файлы cpp, потому что с этими файлами создаются собственные библиотеки.

0 голосов
/ 30 января 2019

По моему мнению, вы не можете использовать систему сборки soong вне AOSP tree.so для компиляции собственных файлов с помощью Android.bp, вам придется собирать внутри дерева AOSP.

Но можете ли вы простовозврат в стабильную ветку вместо использования основного кода ветви.

Soong is the replacement for the old Android make-based build system.
It replaces Android.mk files with Android.bp files,
which are JSON-like simple declarative descriptions of modules to build.



This Makefile-based system is in the process of being replaced with Soong, 
a new build system written in Go. 

During the transition, all of these makefiles are read by Kati, and generate a ninja file instead of being executed directly. 
That's combined with a ninja file read by Soong so that the build graph of the two systems can be combined and run as one.

Если вы извлекаете код в стабильную ветку, такую ​​как pie-release или oreo-r6-release, вы получите исходный код без этого кода.система сборки, и у вас будут старые системные файлы сборки, такие как Android.mk

Но если вам все еще нужен последний исходный код, вы можете прочитать этот файл Android.bp и создать собственный модуль модуля, и собрать его с помощью CMake.

Вам придется конвертировать этот файл Android.bp в CMakeLists.txt для сборки его с помощью cmake.Я думаю, что это будет не очень сложно

Main segement that you want to build is : libjni_latinime
cc_library
{
name: "libjni_latinime",
host_supported: true,
product_specific: true,

sdk_version: "14",
cflags: [
    "-Werror",
    "-Wall",
    "-Wextra",
    "-Weffc++",
    "-Wformat=2",
    "-Wcast-qual",
    "-Wcast-align",
    "-Wwrite-strings",
    "-Wfloat-equal",
    "-Wpointer-arith",
    "-Winit-self",
    "-Wredundant-decls",
    "-Woverloaded-virtual",
    "-Wsign-promo",
    "-Wno-system-headers",

    // To suppress compiler warnings for unused variables/functions used for debug features etc.
    "-Wno-unused-parameter",
    "-Wno-unused-function",
],
local_include_dirs: ["src"],

srcs: [
    "com_android_inputmethod_keyboard_ProximityInfo.cpp",
    "com_android_inputmethod_latin_BinaryDictionary.cpp",
    "com_android_inputmethod_latin_BinaryDictionaryUtils.cpp",
    "com_android_inputmethod_latin_DicTraverseSession.cpp",
    "jni_common.cpp",

    ":LATIN_IME_CORE_SRC_FILES",
],

target: {
android_x86: {
        // HACK: -mstackrealign is required for x86 builds running on pre-KitKat devices to avoid crashes
        // with SSE instructions.
        cflags: ["-mstackrealign"],
    },
    android: {
        stl: "libc++_static",
    },
    host: {
        cflags: ["-DHOST_TOOL"],
    },
}

Вы должны передать эти CFLAGS и включить dir и список исходных файлов, а из target просто передать android libc ++ _ static, поскольку другие вещи для вас бесполезны.

Если вы хотите прочитать о Сун: https://android.googlesource.com/platform/build/soong/

...