私は、他の開発者に配布して各自のアプリケーション内で使用してもらうために、再利用可能な Android コードを作成中です。コードにはリソース依存関係 (レイアウト、xml および png 描画可能ファイル) がいくつかあり、これらを単一のパッケージ (Jar ファイル) 内に含めて参照できるようにしたいと考えています。
これは可能でしょうか?可能であれば、これを行うための最良の方法は何ですか?
ベストアンサー1
R
Android はフォルダ下のリソースファイルで自動的にクラスを作成するため/res
、R
クラスをそのまま使用することfinal static
は不可能です。
jar
ファイルと一緒にファイルを使用する良い解決策を見つけましたres
。その方法は次のとおりです。
ファイルにエクスポートされるソースコードでは
jar
、使用しないでくださいR
変数はコンパイル時に最終的な静的メモリ アドレスに置き換えられるため、使用しないでください。 を使用する代わりにR
、以下の独自の方法を作成しました。public static int getResourceIdByName(String packageName, String className, String name) { Class r = null; int id = 0; try { r = Class.forName(packageName + ".R"); Class[] classes = r.getClasses(); Class desireClass = null; for (int i = 0; i < classes.length; i++) { if (classes[i].getName().split("\\$")[1].equals(className)) { desireClass = classes[i]; break; } } if (desireClass != null) { id = desireClass.getField(name).getInt(desireClass); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } return id; }
たとえば、 という名前のレイアウトがある場合
main.xml
、メソッドを呼び出すことでそれを取得できます。int id = getResourceIdByName(context.getPackageName(), "layout", "main");
「text1」という文字列がある場合
id
、メソッドを呼び出すことで取得できます。int id = getResourceIdByName(context.getPackageName(), "string", "text1");
R
このメソッドは実行時にリソース ID を提供します。実行時のステータスを取得するためにリフレクション API を使用します。この方法を使用すると、変数の使用を回避できます
R
。res
ファイルをターゲット プロジェクトにコピーします。建てる。