2016-07-07 40 views
5

Aşağıdaki sorunlarla karşılaştım: Uyguladığım uygulama bağımlılık olarak başka bir projeyi içeriyor (aar türünde). Her iki proje de aynı ana pompayı paylaşıyor. Bağımlılık, uygulamanın kullandığı kaynakları içerir. Kütüphane projesi içindeki kaynaklara erişmek için, kaynak kimliği context.getResources().getIdentifier(resourceKey, resourceType, packageName) numaralı telefondan aranır. Verilen context nesnesinde getPackageName() numaralı telefonu arayarak paket adını aldım. kütüphane kaynaklarını erişen

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

kullanarak projelerin paket isimlerini değiştirmeden önce iyi çalıştı. Fakat uygulamanın paket adını değiştirdikten sonra android.content.res.Resources$NotFoundException aldığımdan, getIdentifier() numaralı çağrı hala uygulamanın eski paket adını beklediğinden ve getPackageName()'un çağrıldığına göre yenisini (beklendiği gibi) döndürüyor.
Şimdi bir şey mi eksik veya android maven eklentisinde bu bir hata olup olmadığını merak ediyorum?

cevap

2

Yanıt: Bir şey özledim. Proje alanında bu sorunla ilgili bir bilet açtım (https://github.com/simpligility/android-maven-plugin/issues/736). Bir sorun olarak gördüğüm şeyin, yalnızca manifest paketini değil, aynı zamanda kaynakların bu yapılandırma için kapsam dışında olduğunu göstermesi nedeniyle, renameManifestPackage yapılandırmasının beklenen davranışı olduğu ortaya çıktı.

Ancak bunun için bir değil çok çirkin bir çözüm yöntemi bulunmaktadır edilir:

yerine Context nesneden paket adı almak yerine, o Resources nesneden geri almak mümkündür. İşte bu biraz çirkin alır kısım geliyor:

Şimdi
<?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> 

Eğer kaynak paket adı alabilirsiniz: diğer kaynaklar genellikle değişime konulardır beri paket adı almanın tek bir amacı olan bir kaynak eklenmesi gerekiyor aşağıdaki gibi: http://www.piwai.info/renaming-android-manifest-package/

:

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

Kredi gider