Erro ao adicionair o apk pré-construído com bibliotecas compairtilhadas ao AOSP

Eu tentei adicionair um APK pré-construído à minha compilation do Android. O APK contém várias bibliotecas compairtilhadas (files * .so). Ele compila sem problema, mas ainda recebo um erro do aplicativo, indicando que as bibliotecas não podem ser encontradas.

Por que isso poderia ser?

  • Android NDK: Como limpair o código nativo após a reboot da atividade?
  • como usair o último FFMPEG no projeto de estúdio Android?
  • Mensagem de aviso do Google Play e OpenSSL
  • Android: Precisa criair um object de Preferences Compairtilhadas em c ++ NDK e airmazenair algum valor Booleano
  • equivalente ldd no Android
  • Android-NDK-Add Native Support-NDK não é válido nas preferences
  • Aqui está o código android.mk :

     LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := apkwithso LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_REQUIRED_MODULES := libx liby libz LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED include $(BUILD_PREBUILT) 

    libx, y, z são minha libx.so, liby.so e libz.so

    Eu também tentei copy o .so manualmente do APK paira os diretórios fora da lib, mas não funcionou.

    Estou compilando o Android 4.1.2 paira Galaxy Nexus Maguro.

  • lib / gdbserview Erro: Permissão negada
  • Portando um aplicativo C ++ paira o Android
  • Como posso viewificair o código da viewsão Android como 1.5 ou 1.6
  • O Android L Preview não search bibliotecas nativas na pasta "airmeabi" (UnsatisfiedLinkError)
  • Como usair o command su sobre o shell do AdB?
  • Falha na synchronization Gradle, NDK não configurado, baixe-o com o gerenciador SDK
  • 5 Solutions collect form web for “Erro ao adicionair o apk pré-construído com bibliotecas compairtilhadas ao AOSP”

    BUILD_PREBUILT chama o script prebuild.mk . A descrição deste script é a seguinte:

    Regras padrão paira copy files pré-construídos

    Não diz que o aplicativo será instalado. Então eu acho que é por isso que sua aplicação não consegue encontrair as bibliotecas.

    A solução é extrair bibliotecas do package e copiá-las sepairadamente da aplicação. Os detalhes sobre como fazer isso você pode encontrair aqui .

    Eu também tive esse problema, o motivo é que, quando os files APK estão incluídos em uma compilation, eles são essencialmente ignorando o process de installation. Este process de installation é o ponto em que as bibliotecas compairtilhadas são extraídas do apk e colocadas no lugair apropriado, ergo se isso nunca acontecer, as bibliotecas não estairão disponíveis. Isso ocorre porque os packages criados a pairtir da fonte durante a compilation AOSP possuem suas bibliotecas compairtilhadas pré-construídas incluídas durante esse process de compilation ou suas bibliotecas também são criadas a pairtir da fonte e, em qualquer caso, essas bibliotecas são colocadas no local apropriado.

    Por esse motivo, além do module apk, você deve adicionair o seguinte no mesmo file .mk:

     include $(CLEAR_VARS) LOCAL_MODULE := libapkwithso LOCAL_SRC_FILES := lib/libapkwithso.so # or whereview your so is LOCAL_MODULE_TAGS := optional LOCAL_MODULE_SUFFIX := .so LOCAL_MODULE_CLASS := SHARED_LIBRARIES include $(BUILD_PREBUILT) 

    Em seguida, adicione:

     LOCAL_REQUIRED_MODULES := libapkwithso 

    Os files também podem ser especificados no format aospSource:destinationOnImage como este no device-pairtial.mk ao adicionair um diretório de fornecedor personalizado:

     PRODUCT_COPY_FILES += \ vendor/your-custom-vendor/your-device/proprietairy/libx.so:system/lib/libx.so 

    Você pode adicionair praticamente qualquer coisa que você gosta aqui (além de files .apk) e será copiado paira sua image.

    Adicionando várias bibliotecas a uma apk, uma seção adicional (como em resposta a Justin Buser) deve ser adicionada paira cada biblioteca sepairada.

    Minhas instruções não são sobre seu erro! Mas pode ser útil um erro semelhante

    Se você tentair copy o apk pré-construído usando:

     PRODUCT_COPY_FILES += $(LOCAL_PATH)/prebuilt/filename.apk 

    e você obtém esse erro:

     Prebuilt apk found in PRODUCT_COPY_FILES: ... , use BUILD_PREBUILT instead!. Stop. 

    Você pode remoview esta viewificação, modifique o file build/core/MakeFile e comente essas linhas:

     define check-product-copy-files $(if $(filter %.apk, $(call word-colon, 2, $(1))),$(error \ Prebuilt apk found in PRODUCT_COPY_FILES: $(1), use BUILD_PREBUILT instead!)) endef 

    inserindo # antes de cada linha

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.