54

Libraryプロジェクトに属するクラスで、次のように呼び出します。

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

残念ながら、これはファイル info.html をアプリケーションのプロジェクト アセット フォルダーにも複製した場合にのみ機能します。

Android ライブラリ コードに「アプリケーションのアセット フォルダではなく、ライブラリのアセット フォルダでこのファイルを探してください」と伝える方法はありますか?

4

7 に答える 7

81

この回答は古くなっています。gradleビルドシステムとAARファイルはアセットをサポートしています。


Androidドキュメントから:

図書館プロジェクトに生の資産を含めることはできません

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

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

于 2011-06-14T16:50:16.630 に答える
14

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

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

webview.loadUrl("file:///android_asset/folder_in_a_libary_project/info.html", null);
于 2012-09-10T07:01:35.760 に答える
12

わかった。私はしばらくの間、これについてストレスを感じて眠れなくなっていました. 私は、API の作成が好きで、複雑な統合が嫌いなタイプの人です。

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

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

次に、これを [プロジェクト] > [プロパティ] > [Java ビルド パス] > [ソース] > [リンク ソース] の Java ビルド パス フォルダー ソースとして含めることができます。

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

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

Android 内部を再構成する必要はありません。Eclipse を数回クリックするだけで、そのすべてが可能になります。

于 2012-04-26T09:54:38.073 に答える
4

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

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

これは、Eclipse内で非常に簡単な方法であり、さまざまなプロジェクトでアセットをまだ持っていない場合に、それらのプロジェクトでアセットを再利用できるようにします。長期的にはコンテンツプロバイダーになるように強化したいと思いますが、それはもっと多くの開発です。

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

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

于 2012-06-28T18:24:52.167 に答える
1

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

于 2013-05-26T14:45:20.013 に答える
0

私はこの古い質問を見つけました、それはあなたにも役立つかもしれません。

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

于 2011-06-14T16:39:32.277 に答える