1

私はgradleを使ってアプリを構築しています。そして、デバッグ バージョンの packageName にサフィックスを追加します。次のように:

buildTypes {
    debug {
        packageNameSuffix ".debug"
    }
}

ただし、私が使用するライブラリの 1 つはこれで動作しません。

lib は次のようなコードを使用して R クラスを取得していると思います。

drawable = Class.forName(this.context.getPackageName() + ".R$drawable");

そして、java.lang.IllegalArgumentException: ResClass is not initialized をスローします。

R の正しいパッケージは com.xxx.R$drawable です。パッケージに接尾辞を追加したので、lib がリフレクションを使用してクラスを取得しようとすると、com.xxx.debug.R$drawable が取得されます。

それを修正する方法はありますか?ところで、lib は jar ファイルであるため、lib のコードを変更することはできません。

4

1 に答える 1

0

役立つかどうかわかりませんが、さまざまな状況で同様の問題を見てきました。

R クラスは単なるクラスです。たとえば、R パッケージ名が現在のアプリ パッケージ名と異なる場合にimport com.xxx.yyy.R役立ちます。

おそらく、欠落しているクラスを、正しいパッケージ名を持つクラスの祖先として作成できます。もちろん、これは非デバッグ ビルドを破壊するため、デバッグ ビルドにはこのクラスを追加し、非デバッグ ビルドには削除する必要があります。

于 2014-01-15T05:57:42.467 に答える