Android - 複数のアプリケーション間で使用するカスタム ライブラリを作成することは可能ですか?
-
11-09-2019 - |
質問
複数の Android アプリケーション間で使用するために、Android でカスタム ライブラリ (独自のレイアウト リソースを持つ) を作成することは可能ですか?
通常の *.jar ファイルを作成しましたが、ビューを動的に作成/スタイル設定しようとすると、ほとんどのプロパティが機能しません。android.jar ファイルからの単純なスタイルの参照も可能です。 android.attr.listSeparatorTextViewStyle 動作しませんでした。
アクティビティを持たずに Android プロジェクトを作成し、独自のリソース ファイルを持ち、このプロジェクトを別の Android プロジェクトから参照してビルド パスで使用しました。すべてが正常に動作しているように見えますが、エミュレータはクラッシュし続けます (意味のあるエラー メッセージは表示されません) ログキャット) プロジェクトを実行しようとしたとき。
何かが足りないのでしょうか?
解決
まあ、私は(私はそれを自分自身を試してみませんでしたが)それを行う方法があると思いますが、それはあなたのライブラリーのユーザーがaapt
を経由して、手動で自分のAPKを構築することが必要です。
問題はこれです:あなたがエクスポートしているJARは、あなたのライブラリーのリソースIDを保持しているR
クラスファイルが含まれています。だから、任意のアプリケーションは、単にあなたのJARをリンクすることにより、これらのIDにアクセスすることができます。デフォルトでは、アプリの解像度/フォルダ内のリソースのみをAPKにバンドルされているので、しかし、それは、十分ではありません。そのため、また、あなたのライブラリから任意のリソースを含めるために、それを言って、AAPTを使用してAPKを自分で作成する必要があります。詳細については、AAPTツールのヘルプを確認します。
、それは貧しい人々の経験になります。
他のヒント
返事遅くなりますが、興味深いであるこれを見つけた可能性があります。 ライブラリプロジェクトを設定する
のAndroidライブラリプロジェクトであります 共有を保持している開発プロジェクト Androidのソースコードとリソース。 他のAndroidアプリケーションのプロジェクトをすることができます で、ライブラリプロジェクトを参照すると、 時間を構築し、そのコンパイルが含まれます 自分の.apkファイル内のソース。複数 アプリケーション・プロジェクトを参照することができます 同じライブラリプロジェクトと任意の単一 アプリケーションプロジェクトを参照することができます 複数のライブラリプロジェクトます。
あなたはソースコードとリソースを持っている場合 複数に共通していること アプリケーションのプロジェクトは、あなたが移動することができます ライブラリプロジェクトにそれらいるので 全体で維持することが容易です アプリケーションとバージョン。ここにあります であなたのいくつかの一般的なシナリオ ライブラリプロジェクトを使用することができます:
カスタムを作成することが可能です アンドロイドでライブラリ(独自のを持ちます 全体で使用するレイアウトリソース) いくつかのAndroid用アプリケーション?
はありません。 JARは、リソースを持つことができません。あなたがこの方法でコードを共有することができますが、リソースはJARを再利用するアプリケーションに存在する必要があります。
がさえからシンプルなスタイルを参照します などandroid.jarファイル android.attr.listSeparatorTextViewStyle 動作しませんでした。
あなたがandroid.jarに対するあなたのJARをリンクしていることを確認します。あなたは私の githubのページにCWACコンポーネントでこのの多くの例を見ることができます。
これはR21で、まだ本当ですか?私は、jarファイルにライブラリプロジェクトをエクスポートして、成功した他のお客様のプロジェクトで使用される、コード賢明と資産が賢明なファイルへのアクセスの両方ができています。
まだ http://developer.android.com/tools/projects/index.html にはまだもう真実ではないと思われる次の文があります:
あなたはライブラリがすることはできませんJARファイルにライブラリプロジェクトをエクスポートすることはできません (例えば、JARファイルなど)のバイナリファイルとして配布。これが追加されます SDKツールの将来のバージョンでます。