2

Rライブラリから生成されたRファイルとアプリケーションから生成されたファイルのエイリアスを作成できますか?

IE:私には2つのプロジェクトがあり、1つは図書館です。アプリケーションでライブラリを参照します。ライブラリは1つのRファイルを作成し、アプリケーションは2つcom.example.mapplication.Rのファイルを作成しRますcom.example.mlibrary.R。ただし、アプリケーションで両方を頻繁に使用したいので、両方のRクラスのエイリアスを作成します。たとえば、ライブラリをのRように呼び出しlibR、アプリをのRように呼び出しますappR

私はそのような愚かなことをいくつか試しました、私はそれらについて完全には言及しませんが、私はいくつかのことをしましたprivate com.example.mapplication.R appR = com.example.mapplication.R(これはうまくいかないことにすぐに気づきました)、そしてprivate Class<com.example.mapplication.R> appRclass = com.example.mapplication.R.class;それは私に望ましい効果を与えませんでした。ただし、後者のメソッドといくつかのリフレクションを使用して、次のようなフィールドクラスと内部クラスを取得できるようにします。

Class<com.example.mapplication.R> appRclass = com.example.mapplication.R.class;
int activity_main_layoutid = Toolkit.getFromClass(appR).
         getMeTheInnerClass("layout").getMeAField("activity_main");

Toolkitメソッドを完全に実装していませんが、ご存知のとおり、refletionはこの種の処理を実行できますが、結局のところ、入力するだけでcom.example.mapplication.Rcom.example.mlibrary.Rどこでも同じくらいの作業になります。

まとめると、複数をエイリアスしRて、2つを使用appRlibRて区別できるようにすることは可能ですか?

4

1 に答える 1

0

できればいいのですが、私が知っていることによれば、少なくともまだそれは不可能です。

また、サブフォルダにリソースを配置できればいいのですが、それでも不可能です。

いくつかのサードパーティライブラリ(プレフィックスとして「abs」を使用するactionBarSherlockなど)によって行われるように、ライブラリごとに一意のプレフィックスを設定(各リソースファイルの名前を変更)することができます。

または、特別なトリックを使用してファイルをsrcフォルダーに配置し、そこからファイルにアクセスすることもできますRが、そこにあるリソースへの参照がないため、これは回避策です。

たとえば、image.pngという画像をsrc / com / company / app_nameに配置し、次のコマンドを使用してそこからビットマップを作成できます。

final InputStream fis = getClass().getResourceAsStream("/com/company/app_name/image.png");
final Bitmap bitmap = BitmapFactory.decodeStream(fis);

ちなみに、assetsフォルダーの使用を考えている場合は、ライブラリプロジェクトを使用するプロジェクトにファイルが必要なため、ライブラリプロジェクトでは使用できません。それは機能しますが、カプセル化のアイデアを見逃しています...

于 2013-01-08T23:00:40.470 に答える