web-dev-qa-db-ja.com

ライブラリプロジェクトでアセットを参照する方法

Libraryプロジェクトに属するクラスでは:

webview.loadUrl("file:///Android_asset/info.html", null);

残念なことに、これはduplicateファイルinfo.htmlをApplication'sプロジェクトアセットフォルダーに入れた場合にのみ機能します。

Androidライブラリコード:「ライブラリのアセットフォルダーでこのファイルを探し、アプリケーションのアセットフォルダーでnotを」検索する方法はありますか?

51
an00b

Android Docs から:

ライブラリプロジェクトには生のアセットを含めることはできません

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

ライブラリプロジェクトのファイルを含める場合は、アセットではなくリソースにファイルを配置する必要があります。ライブラリプロジェクトからWebViewにHTMLファイルをロードしようとしている場合、これは通常のアセットURLよりも多くの迂回方法を使用する必要があることを意味します。代わりに、リソースデータを読み取り、 loadData のようなものを使用する必要があります。

この答えは 期限切れgradle build system およびAARファイルはアセットをサポートしています。

80
kabuko

これは、Gradleビルドシステムを使用して可能になりました。

Android Studio 0.5.0およびv0.9のAndroid Gradleプラグインを使用して、次のようなファイルを見つけました。

MyLibProject/src/main/assets/test.html

最終アプリケーションに正しくパッケージ化され、実行時に予期されるURLからアクセスできます。

file:///Android_asset/test.html
20
Graham Borland

はい。私はしばらくの間、これについて強調し、睡眠を失いました。 APIの作成を愛し、複雑な統合を嫌う人のタイプです。

インターネットには多くのソリューションが存在しないため、Eclipse Hackeryで発見したことを非常に誇りに思っています。

ファイルをAndroid Libの/ assetsフォルダーに配置すると、ターゲットapkがこれをキャプチャし、APKアーカイブのルートに配置するため、一般的なアクセスが失敗します。これは、Raw Java Libraryを作成し、そこにすべてのアセット、つまり(JAVALIB)/assets/fileX.txtを配置するだけで解決できます。

次に、これをJava ProjectのBuild Path Folder Source> Properties> Java Build Path> Source> Link Source。

  1. リンク元
  2. 変数をクリックします。新しい変数、つまりVAR_NAME_Xを追加します。場所:../../(relative_path_to_assets_project)
  3. OKをクリック

これで、アプリをビルドして実行すると、APKのアセットフォルダーに(GLOBAL Library)ファイルが意図したとおりに含まれます。

再構成する必要はありませんAndroid internals or nothing.Eclipseを数回クリックするだけですべてが可能になります。

12
Daniel Grant

これを実現するには、ライブラリプロジェクトのディレクトリを指すシンボリックリンクをプロジェクトのアセットフォルダーに作成します。

次に、以下のようにアクセスできます。

webview.loadUrl("file:///Android_asset/folder_in_a_libary_project/info.html", null);
11
Yuichi Kikuchi

Daniel Grantのアプローチは、少なくとも次の状況で機能することを確認します。ターゲットプロジェクトにアセットフォルダーがない(またはフォルダーが空なので、安全に削除できる)。変数を設定しませんでした。次のようにLinkSourceを設定するだけです(例)リンクされたフォルダーの場所:/ home/matthew/workspace_moonblink/assetsForAdvocacy/assetsフォルダー名:資産

「assetsForAdvocacy」は、Javaプロジェクト、(New- Project-Java Project)で作成)空のsrcフォルダー、および「assets」という名前の新しいフォルダーです。 、ターゲットプロジェクトのアセットフォルダー全体を提供するようになりました。

これは、Eclipse内でかなり簡単な方法であり、多くのさまざまなプロジェクトで資産を再利用できます。長期的にはコンテンツプロバイダーになるように機能強化したいと思うかもしれませんが、それはさらに多くの開発です。

私のプロジェクトは、次のコードでアセットにアクセスします。String advocacyFolderInAssets = "no_smoking /"; // assetsの下のフォルダー/ String fn = advocacyFolderInAssets + imageFilename;ビットマップpristineBitmapForAdvocacy = getBitmapFromAsset(context、fn);

UbuntuでMotodev Studio 3.1.0を使用します。新しいアセットのみのプロジェクトの新しいアセットフォルダーをターゲットプロジェクトの既存のアセットフォルダーに「マージ」することはできません。

4
mbarton888

1つのライブラリから複数の派生製品が作成されるセットアップを使用する場合は、SCMシステムでsvn:externalsまたは同様のソリューションを使用することを検討してください。これは、オンラインヘルプのような静的アセットをAndroidソースコードとは別にバージョン管理できるというトリックも行います。

1
FINARX

この古い質問 が見つかりました。これもあなたを助けるかもしれません。

これは、Googleがこれをアーカイブするために公式に使用する方法です(上記の投稿から): Link

0
Lukas Knuth