Как добавить внешнюю библиотеку Java в пользовательский фреймворк Android?

Может кто-нибудь просветить меня о том, как включить внешний Java-фреймворк в Android-фреймворк и скомпилировать его как часть пользовательского фреймворка Android?

Идея состоит в том, чтобы сделать эту внешнюю среду частью моей пользовательской платформы Android и представить ее как службу Android для использования другими процессами.

По сути, то, что я сделал, -

  1. проверил на андроид порт фреймворка Java
  2. Скопировал каталог src (включая все внешние файлы jar) из перенесенного фреймворка в framework/base/core/java/android/
  3. Отредактировал ActivityManager в фреймворке для вызова скопированной библиотеки
  4. запустить сделать

Правильный ли это подход для редактирования фреймворка Android? Поскольку я включаю java-файлы и связанные внешние jar-файлы внешнего проекта в платформу Android, я подозреваю, что make завершается неудачно при конвертации jar-файлов в dex.

Может кто-нибудь указать мне на какие-либо доступные ресурсы, касающиеся внутренних компонентов Android Framework и о том, как редактировать Android Framework?

Я проверил Tutorial: Android Internals - Building a Custom ROM, Pt. 2 of 2 на YouTube из презентации Марко Гаргента этого года в Пекине, Китай. Но он не сделал это (то есть добавление внешнего фреймворка или фляги) также ясно.

2 ответа

Решение

Во-первых, я не очень разбираюсь в процессе сборки Android, поэтому может быть и лучшее решение, но оно должно работать (по крайней мере, для Android 2.2).

Я предполагаю, что вы используете Eclipse для модификации исходного кода и уже выполнили успешное make -j4...

  • Создайте новую исходную папку: external/<your-library>/src
  • Скопируйте все исходные файлы Java в эту папку.
  • Откройте следующий файл make: <android>/frameworks/base/Android.mk
  • Ищи # Build ext.jar и добавьте свою библиотеку следующим образом:

    [...]
    ext_dirs := \
        ../../external/apache-http/src \
        ../../external/<your-library>/src \
        ../../external/gdata/src \
        ../../external/protobuf/src \
        ../../external/tagsoup/src
    [...]
    
  • Теперь вы должны иметь доступ к этим библиотекам из платформы Android...
  • Наконец выполнить make -j4 ext построить только внешний модуль,
  • Или же make -j4 построить все измененные файлы (если в /out/).

README.txt из git repo в https://android.googlesource.com/platform/vendor/sample является хорошим примером того, как это сделать. Это хорошо, чтобы клонировать его, чтобы увидеть примеры.

В основном вам нужно создать JAR-файл и добавить его в файловую систему, добавить конфигурацию XML в /system/etc/permissions/ и объявить <uses-library> в апк AndroidManifest.xml,

В моем случае у меня была проблема с добавлением <uses-library> в неправильном месте (не в <application>).

Так что хорошо бы проверить результат с помощью:

$ aapt dump badging Foo.apk | grep uses-library
uses-library:'android.foo'
Другие вопросы по тегам