2016-07-07 23 views
5

Ho riscontrato il seguente problema: L'app che ho implementato include un altro progetto come dipendenza (di tipo aar). Entrambi i progetti condividono lo stesso padre genitore. La dipendenza include risorse che l'app sta utilizzando. Per accedere alle risorse all'interno del progetto di libreria, l'ID risorsa viene recuperato chiamando context.getResources().getIdentifier(resourceKey, resourceType, packageName). Ricevo il nome del pacchetto chiamando getPackageName() sull'oggetto context specificato. Prima di cambiare i nomi dei pacchetti dei progetti utilizzando

<renameManifestPackage>com.example.newpackagename</renameManifestPackage> 

l'accesso alle risorse di libreria ha funzionato bene. Ma dopo aver rinominato il nome del pacchetto dell'app ricevo un android.content.res.Resources$NotFoundException perché la chiamata getIdentifier() si aspetta ancora il vecchio nome del pacchetto dell'app e chiamando getPackageName() restituisce il nuovo (come previsto).
Ora mi chiedo se mi manca qualcosa o se si tratta di un bug nel plugin Android Maven?

risposta

2

La risposta è: ho perso qualcosa. Ho aperto un ticket relativo a questo problema sul sito del progetto (https://github.com/simpligility/android-maven-plugin/issues/736). Si è scoperto che quello che ho visto come un problema è il comportamento previsto della configurazione renameManifestPackage, poiché la rinomina non solo il pacchetto manifest ma anche le risorse è fuori portata per questa configurazione.

V'è, tuttavia, una soluzione non troppo brutto per questo:

Invece di recuperare il nome del pacchetto dall'oggetto Context, è possibile recuperarlo dall'oggetto Resources. Qui viene la parte dove ottiene un po 'brutto: una risorsa con l'unico scopo di recuperare il nome del pacchetto deve essere aggiunto in quanto altre risorse sono di solito soggetti a cambiare:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!-- The only purpose of this resource is to retrieve the resource package name --> 
    <item name="used_for_package_name_retrieval" type="id"/> 
</resources> 

Ora è possibile recuperare il nome del pacchetto di risorse come segue:

Resources resources = context.getResources(); 
String packageName = resources.getResourcePackageName(R.id.used_for_package_name_retrieval); 

merito va a: http://www.piwai.info/renaming-android-manifest-package/

Problemi correlati