Как упаковать готовую разделяемую библиотеку внутри APK - PullRequest
5 голосов
/ 12 января 2012

Этот вопрос, кажется, задавался много, но все пытались использовать eclipse для упаковки библиотеки внутри APK.Однако мое требование состоит в том, чтобы упаковать библиотеку внутри APK (которая позже будет загружена с использованием System.loadLibrary () через Java) с использованием системы сборки Android, т.е. я хочу написать файл Android.mk, который выполняет эту работу.

Требование: 1. Предварительно собранная разделяемая библиотека: libTest.so 2. Напишите файл Android.mk, который упакует это в libs / armeabi-7 внутри apk.

Я не знаю много осистема сборки, которую я использую, но компиляция выполняется командой «мм» после экспорта необходимых переменных среды.

Когда я предоставляю libTest для LOCAL_JNI_SHARED_LIBRARIES, он пытается найти его в своих экспортированных путях и не может найти его там, и, следовательно, сборка завершается неудачей.

Может кто-нибудь дать какие-либо указания по написанию Android.mk-файл, который упакует мою предварительно собранную разделяемую библиотеку в APK?

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Чтобы предварительно собрать свою нативную библиотеку, вам нужно

  1. Создать jni папку в папке вашего проекта
  2. Создать libs папку в папке вашего проекта
  3. Добавьте Adnroid.mk make файл в папку jni, он должен выглядеть следующим образом это:

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_LDLIBS    := -llog
    LOCAL_MODULE    := Test
    LOCAL_SRC_FILES := Test.cpp
    
    include $(BUILD_SHARED_LIBRARY)
    

Примечание 1: Test.cpp - это основной исходный файл библиотеки, содержащий реализацию собственных методов. Вы можете добавить больше источников в виде списка, разделенного пробелами.

Примечание 2. Не включайте заголовки, они включаются автоматически.

Примечание 3: Если вам нужно включить C ++ STL, создайте еще один файл make - Application.mk, добавьте его в папку jni и установите в нем флаг APP_STL := stlport_static.

Тогда вам нужно будет создать строителя. Обратитесь к этой статье , чтобы узнать, как это сделать:

После этих шагов сборщик создаст вашу библиотеку в папке libs, которая будет автоматически упакована в apk при сборке всего приложения.

Примечание: имя вашей библиотеки должно быть строчным, это соглашение Linux. Префикс "lib" будет добавлен автоматически, поэтому окончательное имя библиотеки будет libtest.so.

1 голос
/ 25 ноября 2012

Допустим, есть одна libxxx.so общая библиотека в libs/armeabi/ проекта, которую вы хотите упаковать в apk. В Android.mk нужно сделать 2 вещи, как показано ниже:

# 1. Copy .so to out/target/product/***/obj/lib
$(shell cp $(wildcard $(LOCAL_PATH)/libs/armeabi/*.so $(TARGET_OUT_INTERMEDIATE_LIBRARIES)) 

# 2. Make libxxx to be packed into apk
LOCAL_JNI_SHARED_LIBRARIES := libs/libxxxx


Затем вы можете использовать apktool для распаковки встроенного apk, вы обнаружите, что libxxx.so будет находиться в libs/armeabi*/. Это действительно упаковано в apk.

...