0

ライブラリプロジェクトを使用しているときに、名前でリソースのIDを取得する際に問題が発生します。

int resId = context.getResources().getIdentifier("myresname", "drawable", "net.iberdroid.mygamecore");

プロジェクトをライブラリとして使用する場合、これは常に0を返すように見えますが、スタンドアロンプ​​ロジェクトである間は問題なく機能していました。

net.iberdroid.mygamecoreは、これらのリソースが存在する場所であり、実際にはそこにあります。

そのコードは、それをリンクするandroidプロジェクトからではなく、ライブラリプロジェクトパッケージ内で実行されます。

何か案は?

4

1 に答える 1

1

私は解決策を見つけましたが、それは少し奇妙で、同じゲームの異なるバージョン(通常は無料バージョンと有料バージョン)で繰り返し変更を加えないためにライブラリを使用しているため、少し面倒です。

このコンテキストでは、net.iberdroid.mygamecoreは支払いバージョンと無料バージョンで共有されるライブラリプロジェクトであり、net.iberdroid.gamefreeとnet.iberdroid.gameproはゲームの無料バージョンと有料バージョンのAndroidプロジェクトです。

前のコードのパッケージ名を「net.iberdroid.gamefree」で変更すると、正常に動作します。ただし、問題は、そのコードがライブラリ内にあり、「net.iberdroid.gamepro」でも使用されるため、無料バージョンのパッケージ名を入力すると、有料バージョンとその逆が壊れることです。

したがって、ライブラリ内でそのコードを共有したい場合は、プロジェクトのパッケージ名を動的に取得する必要があります。だからこれはトリックを行います:

public static int getDrawableId(String dname) {
    String pn = context.getPackageName();
    int resId = context.getResources().getIdentifier(dname, "drawable", pn);
    return resId;
}
于 2012-07-24T11:44:56.823 に答える