Как добавить внешнюю библиотеку Java в пользовательский фреймворк Android?
Может кто-нибудь просветить меня о том, как включить внешний Java-фреймворк в Android-фреймворк и скомпилировать его как часть пользовательского фреймворка Android?
Идея состоит в том, чтобы сделать эту внешнюю среду частью моей пользовательской платформы Android и представить ее как службу Android для использования другими процессами.
По сути, то, что я сделал, -
- проверил на андроид порт фреймворка Java
- Скопировал каталог src (включая все внешние файлы jar) из перенесенного фреймворка в
framework/base/core/java/android/
- Отредактировал ActivityManager в фреймворке для вызова скопированной библиотеки
- запустить сделать
Правильный ли это подход для редактирования фреймворка 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'