2013-04-17 11 views
14

内部的にいくつかの静的リソース(images/xmlなど)を必要とするアンドロイドライブラリプロジェクトを構築しています。androidライブラリプロジェクトのリソースへのアクセス方法

次に、私はこれらのリソースをどこに置くことができ、どのようにアクセスするのだろうか?

私はリソースをassetsフォルダに入れました。そして、私はリソースにアクセスするためにAssetManagerを使用します。

public class DataProvider { 
    byte[] getDrawableData(int num) { 
     AssetManager am = Resources.getSystem().getAssets(); 
     InputStream is = null; 
     try { 
      is = am.open("t.jpg"); 
     } catch (IOException e) { 
      return "".getBytes(); 
     } 
     if (is != null) { 
      Drawable dw = Drawable.createFromStream(is, null); 
      Bitmap bm = ((BitmapDrawable) dw).getBitmap(); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bm.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
      return stream.toByteArray(); 
     } 

     return "".getBytes(); 
    } 
} 

私はエラーを得たしかし:問題はW/System.err(19583): java.io.FileNotFoundException: t.jpg

は何ですか?


Sankar Vと言っても、ライブラリプロジェクトは生のアセットをサポートしていません。それで、私は、resurcesをresフォルダの下に置かなければならないようです。

しかし、私が望むものを得ることができないResources.getSystem().getResources()....メソッドを使用しようとしました。また、この方法では、アプリケーションレベルのリソースではなく、システムレベルのリソースしか取得できないという人もいました。

これが真実ならば。それは、私がリソースを取得したいと思うどこでもContextオブジェクトの参照を保持する必要があることを意味しますか。

+0

私は解決策として提供したリンクを完全にチェックしましたか?それは、 "はい、ライブラリのパッケージ名を知っていれば可能です"と言いますが、実際の解決策があります。 –

+0

私は投稿を読んだ。しかし、私は 'context'オブジェクトにアクセスすることができないので、' getResources().... 'を呼び出すことはできません。 – hguser

+0

DataProviderクラスがどこにあるか確認したいと思いますか?ライブラリプロジェクトまたはアプリケーションプロジェクト –

答えて

7

次に、私はこれらのリソースをどこに置くことができ、どのようにアクセスするのだろうか?

アンドロイドドクさん

ライブラリプロジェクトは、生の資産を含めることはできませんから、

ツールは、ライブラリプロジェクトに(資産/ディレクトリに保存された)生のアセットファイルの使用をサポートしていません。アプリケーションが使用する資産リソースは、アプリケーションプロジェクト自体の資産/ディレクトリに格納する必要があります。ただし、res /ディレクトリに保存されているリソースファイルは、に対応しています。

ドキュメント参考リンク:LibraryProjects

ソリューション:How to access resource files saved in res/ directory of library project from application project

注:あなたはassetsres/ directoryないにリソースを追加ライブラリプロジェクト自体からリソースにアクセスしたい場合。アセットのファイルは.jarファイルにバンドルされないためです。 R.javaファイルで生成された参照を使用して、通常通りアクセスできます。

例:描画可能な使用からの画像にアクセスするには

R.drawable.image_name 

それは私がどこでも私はすべてのリソースを取得したいContextオブジェクトの参照を保持する必要があることを意味していますか?

本当にあなたが更新リソース

にアクセスするには、コンテキストへの参照を保持する必要があります

今のAndroidライブラリプロジェクトを使用して、リソースをバンドルすることができますAAR(アンドロイドアーカイブ)ファイルとして生成することができますJavaクラスをバンドルできるだけの古いjar(Java Archive)ファイルではなく、ライブラリプロジェクトに必要なファイルです。

+0

Sankar:あなたは 'ライブラリプロジェクトは生の資産を含んでいません。しかし、私はクラスと資産フォルダを一緒にパッケージ化する第三者ライブラリを使用しました。何が問題ですか? – hguser

+0

サードパーティのライブラリが何であるか分かりますか? –

+0

これはアンドロイドSDKです。このスクリーンショットを参照してください:http://i.imgur.com/7I6aq1D.png。 – hguser

0

Eclipseでリンクフォルダを使用し、アセットフォルダを新しいプロジェクトにリンクすることができます。

+0

これはおそらく今日に好まれるはずのAndroid Studioではなく、Eclipseで役立ちます。しかし、私はこれがリンクされたフォルダーがプロジェクトがビルドされているときにリンクしていないので、これがEclipseでも役立つとは思わない –

関連する問題