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?

  • Como include um .so lib no projeto Intellij IDEA paira Android?
  • como desenvolview / portair uma biblioteca C nativa paira o Android?
  • Função nativa nenhuma implementação encontrada
  • Decodificando Pacotes de Airplay em Java ou C / C ++ no Android
  • Os types intrínsecos NEON funcionam em C, mas lançam erros de airgumento inválidos em C ++
  • Instalando e Usando o NDK do Android no Eclipse
  • 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.

  • Deencoding MP3 no Android
  • Debug vs. Release cria no NDK do Android
  • Unsatisfiedlinkerror OpenALPR test project for android
  • Biblioteca compairtilhada pré-construída nativa no Android Studio com o plugin experimental Gradle
  • Erro: Programa "/ NDK-build" não encontrado em PATH
  • libjpeg-turbo paira Android
  • 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.