Aggiungi un progetto android come libreria in AOSP App

Voglio aggiungere alcune funzioni nell'applicazione Browser iniziando un'attività da un'altra applicazione Android. Mi dà il package does not exist mentre faccio il progetto principale. Notare che vedo che l'AndroidLib è stato costruito con successo in un prodotto out/target/product/generic/data/app/AndroidLib.apk

Ecco due file di android.mk: AndroidLib (una normale applicazione Android)

  • Come è ansible sapere che il collegamento verrà reindirizzato
  • C'è un modo per riavviare un servizio dopo aver aggiornato l'applicazione su Android?
  • Proguard ignora il file di configuration della libreria
  • Denial of permission: startActivity chiede di eseguire come utente -2 ma sta chiamando da utente 0; questo richiede android.permission.INTERACT_ACROSS_USERS_FULL
  • Query per sqlite in android (query di inserimento)
  • Come get tutti i file di image disponibili in sdcard in android?
  •  LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_STATIC_JAVA_LIBRARIES := \ google-ps \ android-support-v4 \ LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ LOCAL_MODULE := AndroidLib LOCAL_PACKAGE_NAME := AndroidLib LOCAL_MODULE_TAGS := tests LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := google-ps:libs/google-play-services.jar include $(BUILD_PACKAGE) # additionally, build tests in sub-folders in a separate .apk include $(call all-makefiles-under,$(LOCAL_PATH)) 

    App Browser

     LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := \ android-common \ guava \ android-support-v13 \ android-support-v4 \ LOCAL_SRC_FILES := \ $(call all-java-files-under, src) \ src/com/android/browser/EventLogTags.logtags LOCAL_PACKAGE_NAME := Browser LOCAL_PROGUARD_FLAG_FILES := proguard.flags LOCAL_EMMA_COVERAGE_FILTER := *,-com.android.common.* # We need the sound recorder for the Media Capture API. LOCAL_REQUIRED_MODULES := SoundRecorder, AndroidLib include $(BUILD_PACKAGE) # additionally, build tests in sub-folders in a separate .apk include $(call all-makefiles-under,$(LOCAL_PATH)) 

    Poi faccio:

     make -j Browser 

    Mi dà:

     packages/apps/Browser/src/com/android/browser/BrowserActivity.java:36: package com.om.AndroidLib does not exist import com.om.AndroidLib.MainActivity; 

  • Abilita la modalità Aereo su tutti i livelli API a livello di programmazione Android
  • Passare una list come un ParcelableArrayList
  • Android Studio 1.2 - Impostazioni di codifica di progetto per impostazione predefinita
  • Invio di MMS in diversi dispositivi Android
  • “Android.intent.extra.STREAM”
  • Compilazione del codice C (netcat) per eseguire l'esecuzione di Android nativo
  • 3 Solutions collect form web for “Aggiungi un progetto android come libreria in AOSP App”

    Aggiornare

    Essenzialmente il tuo problema è che la linea:

     LOCAL_REQUIRED_MODULES := SoundRecorder, AndroidLib 

    Dice AndroidLib che il tuo Browser dipende da AndroidLib viene costruito in primo luogo, tuttavia non sarà collegato a AndroidLib in alcun modo. Per fare ciò è necessario:

     LOCAL_JAVA_LIBRARIES := AndroidLib 

    Tranne che richiede che l' AndroidLib sia un progetto di libreria Java, utilizzando il tipo di build:

     include $(BUILD_JAVA_LIBRARY) 

    Le librerie Java non possono includere risorse, purtroppo. E non c'è modo di colbind un'applicazione a un'altra applicazione nel sistema di creazione di Android.

    Stiamo lavorando attorno a questo problema frequentemente, ed è francamente un po 'un disordine per farlo. Ma l'unica soluzione che abbiamo trovato è includere tutte le risorse direttamente nelle app che utilizzano tali risorse. Scusate.


    Come rendere il tuo AndroidLib una libreria java e collegarla

    Il tuo android lib dovrebbe essere probabilmente costruito come una libreria java, e non come un pacchetto app. Quindi, invece di:

     include $(BUILD_PACKAGE) 

    Probabilmente dovresti fare:

     include $(BUILD_JAVA_LIBRARY) 

    Quindi la lib verrà inserita in out/target/product/generic/system/framework/AndroidLib.jar insieme ad altri libs di sistema.

    Inoltre non è necessario un LOCAL_MODULE_NAME per un lib, è applicabile solo ad un'app. Così striscia che.

    E probabilmente probabilmente dovresti cambiare il tuo LOCAL_MODULE_TAGS su:

     LOCAL_MODULE_TAGS := user 

    tests indicano che lib deve essere costruito solo per il test, l' user dice di costruirti lib per tutte le build utente (e implicitamente anche per build ingegneristiche)


    In app app Android.mk dovresti aggiungere una row:

     LOCAL_JAVA_LIBRARIES := AndroidLib 

    In modo che la tua applicazione verrà costruita con AndroidLib nel path classpath.


    In te apps AndroidManifest.xml è inoltre necessario inserire una libreria di utilizzi nel tag di application :

     <uses-library android:name="AndroidLib" /> 

    E per ultimo è necessario creare un file xml di autorizzazioni, con i seguenti contenuti:

     <?xml version="1.0" encoding="utf-8"?> <permissions> <library name="AndroidLib" file="/system/framework/AndroidLib.jar"/> </permissions> 

    E aggiornare il file di configuration del prodotto in modo che il file xml verrà distribuito per il targeting:

     PRODUCT_COPY_FILES += device/XXX/libs/AndroidLib.xml:system/etc/permissions/AndroidLib.xml 

    Sostituisci device/XXX/libs/ con il path del file xml autorizzazioni.


    Questo è il modo in cui aggiungiamo e usiamo una libreria Android nelle nostre build di Android. Spero possa essere d'aiuto. 🙂

    So che sto scavando un po 'dalla tomba, ma non c'era mai una risposta per come includere effettivamente un progetto Android Library (o un altro apk con risorse ) all'interno di un'applicazione AOSP.

    Ecco quello che ho fatto con due progetti. "main" è l'applicazione principale che sto costruendo l'apk per. "util" è una libreria di utilità con le risorse che stavo collegando. Entrambi i progetti risiedono in esterni / seabold / {package}:

    Android.mk in seabold /

     LOCAL_PATH := $(call my-dir) UTIL_PATH := $(LOCAL_PATH)/util UTIL_JAVA_SRC := $(call all-java-files-under, util/src) #Filter out if the util library isn't present UTIL_RES_DIR := $(wildcard $(UTIL_PATH)/res) include $(call all-subdir-makefiles) 

    Android.mk in seabold / main /

     LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_PACKAGE_NAME := main LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) #Since the BUILD_PACKAGE makefile expects java files to be relative paths, #we need to add the ../ in front of each file (which is stored as relative #to seabold/ LOCAL_SRC_FILES += $(patsubst %.java,../%.java,$(UTIL_JAVA_SRC)) #Make sure both packages' resources are included LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res $(UTIL_RES_DIR) #Since we are including resouces for two packages (This app and the util lib), #we need to tell aapt to generate an R.java for the util package as well LOCAL_AAPT_FLAGS := --generate-dependencies --extra-packages com.seabold.util --auto-add-overlay include $(BUILD_PACKAGE) 

    Fare attenzione qui per assicurarsi di eseguire correttamente i nomi dei file. Per me, i file definiti in UTIL_JAVA_SRC sono in forma di util/src/com/seabold/util/*.java . Poiché lo script di build per l'applicazione principale prevede che i file java siano routes relativi alla posizione di Android.mk , aggiungo un ../ per arrivare correttamente al path della libreria util.

    La chiave per le risorse è il LOCAL_AAPT_FLAGS. Questo indica al packager di risorse di assicurarsi che genera un R.java per il pacchetto nella libreria di utilità. Senza questo, tutte le risorse dell'utilità verranno messe nelle principali applicazioni R.java e le classi di utilità non riescono a compilare perché la sua R.java mancherà.

    Per aggiungere un file di jar pre-build al framework che ho fatto:

    1. Individuare una cartella con il jar e il file Android.mk sotto

      prebuilds / misc / common /

    Android.mk:

     LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := <jar name> LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := <jar name>.jar LOCAL_MODULE_CLASS := JAVA_LIBRARIES LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX) include $(BUILD_PREBUILT) 
    1. Esegui fare il file Android.mk: make prebuilds/misc/common/Android.mk

    2. Aggiungere il file jar al framework / base / services / Android.mk:

    LOCAL_STATIC_JAVA_LIBRARIES := $(addprefix services.,$(services)) jar-name

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