Errore durante l'aggiunta di apk predefinito con librerie condivise a AOSP

Ho provato ad aggiungere un APK preinstallato alla mia build di Android. L'APK contiene diverse librerie condivise (file * .so). Si compila senza problemi, ma ho ancora un errore dall'app che indica che le librerie non possono essere trovate.

Perché questo potrebbe essere?

  • Corrisponde gli URI con <dati> come http://example.com/sometto in AndroidManifest
  • Errore di tutorial di Android: R non può essere risolto a una variabile
  • SMS ricevuti nella mia app SMS e in Hangouts, anche se chiamo abortBroadcast ()
  • Android WebView Javascript getSelection
  • Viste cliccabili in Custom ExpandableListView
  • Indirizzamento esplicito di un intento a un ricevitore dinamico
  • Ecco il codice 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 sono il mio libx.so, liby.so e libz.so

    Ho anche provato a copiare manualmente l'.so manualmente dall'APK alle directory lib out, ma non funzionava.

    Sto compilando con Android 4.1.2 per Galaxy Nexus Maguro.

  • Come risparmiare meglio lo stato di acquisto di InApp localmente?
  • Come rendere il mio app pieno schermo in Galaxy Tab
  • GCM non è stato ricevuto dopo il minimo
  • Android Eclipse - Imansible visualizzare l'opzione di elaborazione delle annotazioni
  • Come disegnare cerchio per canvas in Android?
  • onClickListener in Canvas
  • 5 Solutions collect form web for “Errore durante l'aggiunta di apk predefinito con librerie condivise a AOSP”

    BUILD_PREBUILT chiama script prebuild.mk . La descrizione di questo script è la seguente:

    Norme standard per la copia di file pre-installati

    Non dice che l'applicazione verrà installata. Quindi penso che sia per questo che la tua applicazione non riesce a trovare le librerie.

    La soluzione è quella di estrarre le librerie dal pacchetto e copiarle separatamente dall'applicazione. I dettagli su come farlo si possono trovare qui .

    Ho avuto questo problema stesso, il motivo è che quando i file APK sono inclusi in una build essi essenzialmente escludono il process di installazione. Questo process di installazione è il punto in cui tutte le librerie condivise vengono estratte dall'APK e messe nel luogo appropriato, ergo se ciò non accade, le librerie non saranno disponibili. Ciò è dovuto al fatto che i pacchetti costruiti dalla sorgente durante la build di AOSP dispongono di librerie condivise preinstallate incluse durante il process di creazione o le loro librerie sono anche costruite dalla fonte e in entrambi i casi le librerie vengono messe nel luogo appropriato.

    Per questo motivo, oltre al module apk stesso, è necessario aggiungere il seguente file nello stesso file mk:

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

    Poi aggiungi:

     LOCAL_REQUIRED_MODULES := libapkwithso 

    I file possono anche essere specificati in formato aospSource:destinationOnImage come questo nel device-partial.mk quando si aggiunge una directory del fornitore personalizzato:

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

    Puoi aggiungere praticamente tutto ciò che ti piace qui (ad exception dei file .apk) e verrà copiato nella tua image.

    Oltre a aggiungere più librerie a una apk, una sezione aggiuntiva (come in risposta di Justin Buser) dovrebbe essere aggiunta per each libreria separata.

    Le mie istruzioni non riguardano il tuo errore! Ma può essere utile per un errore analogo

    Se si tenta di copiare apk prebuilt utilizzando:

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

    e si ottiene questo errore:

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

    Puoi rimuovere questo controllo per modificare il file build/core/MakeFile e commentare queste righe:

     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 

    inserendo # prima di each row

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.