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?

  • Come get il profilo come il genere da google signin in Android?
  • Qual è il modo giusto per comunicare da una vista personalizzata all'attività in cui risiede?
  • Pulsante indietro di Android e MediaController
  • Creazione di OnDragListener per il frammento di Google Map v2
  • come recuperare i dati da una vista di riciclatore da FIREBASE
  • Dagger: dovremmo creare each componente e module per each Attività / Frammento
  • 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 posso submit un'applicazione Android che sta sviluppando a qualcuno tramite e-mail?
  • RuntimeException: il carattere nativo non può essere creato
  • Android Studio - Autocomplete XML Editor non funziona con le librerie di supporto
  • resources.ap_ non esiste quando compila il mio progetto android
  • Aggiunta di una window di dialogo di avanzamento in una videata web
  • ACTION_PICK_WIFI_NETWORK in una window di dialogo con reti disponibili
  • 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.