2016-07-07 6 views
5

私は次の問題が発生しました: 私が実装したアプリケーションには、(aar型の)依存関係として別のプロジェクトが含まれています。両方のプロジェクトは同じ親のpomを共有します。依存関係には、アプリケーションが使用しているリソースが含まれます。ライブラリプロジェクト内のリソースにアクセスするには、context.getResources().getIdentifier(resourceKey, resourceType, packageName)を呼び出してリソースIDを取得します。指定されたcontextオブジェクトのgetPackageName()を呼び出してパッケージ名を取得します。 は、ライブラリのリソースにアクセスする

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

使用することによって、プロジェクトのパッケージ名を変更する前にうまく働きました。しかし、アプリケーションのパッケージ名を変更した後、getIdentifier()コールはまだアプリケーションの古いパッケージ名を期待しており、getPackageName()を呼び出すと(期待通りに)新しい値が返されるため、android.content.res.Resources$NotFoundExceptionが返されます。
今、私は何かが欠けているのか、これがAndroid Mavenプラグインのバグであるのだろうか?

答えて

2

答えは:私は何かを逃した。この問題に関するチケットをプロジェクトサイト(https://github.com/simpligility/android-maven-plugin/issues/736)に開設しました。マニフェストパッケージだけでなく、リソースの名前変更もこの設定の対象外であるため、私が問題として見てきたのはrenameManifestPackageコンフィグレーションの動作です。

、しかし、これはあまりにも醜いない回避策があります:

代わりのContext対象からパッケージ名を検索し、Resourcesオブジェクトから取得することが可能です。ここではそれは少し醜いなる部分が来る:他のリソースが通常であるため、パッケージ名を取得する単一の目的を持つリソースを追加する必要が変更する対象:

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

今、あなたは、リソースのパッケージ名を取得することができます次のように:http://www.piwai.info/renaming-android-manifest-package/

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

クレジットに行きます

関連する問題