ライブラリにできるだけ多くの共通コードを入れ、各フレーバーのプロジェクトを作成することで、さまざまなフレーバー (無料、有料など) を持つアプリケーションを作成しようとしています。現時点では、メイン アクティビティの Java クラスはすべてのバージョンで同じになります。動作を制御するために変更する必要があるのは、"values" リソース ディレクトリで定義されたレイアウトといくつかの定数だけです。
「無料」プロジェクトのマニフェスト ファイルでアクティビティを次のように定義しました。
<activity
android:name="librarypackagename.Foo"
android:label="@string/bar"
android:launchMode="singleTask"
android:uiOptions="splitActionBarWhenNarrow"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
しかし、アプリケーションをテストすると、次のエラーが表示されます。
「Activity ComponentInfo{freeapppackagename/librarypackagename.Foo} をインスタンス化できません: java.lang.ClassNotFoundException: パスにクラス "librarypackagename.Foo" が見つかりませんでした: DexPathList[[zip ファイル "/data/app/freeapppackagename-2.apk" ],nativeLibraryDirectories=[/data/app-lib/freeapppackagename-2, /vendor/lib, /system/lib]]"
図書館の活動を主な活動として使用することはできませんか? また、無料アプリ プロジェクトで Foo を拡張し、それをメイン アクティビティとして使用してこれを試しましたが、それでも同じ例外が発生します。
編集 (マニフェスト ファイルは問題に関連していないことが判明したため、削除しました):
また、Eclipse では、次のエラー メッセージが表示されることに気付きました (ただし、プロジェクトは引き続きビルドされます)。
依存関係リストに android-support-v4.jar の 2 つのバージョンが見つかりましたが、すべてのバージョンが同一というわけではありません (チェックは現時点では SHA-1 のみに基づいています)。現時点では、ライブラリのすべてのバージョンが同じである必要があります。見つかったバージョンは次のとおりです: パス: D:\Work\Eclipse\LiteApplicationName\libs\android-support-v4.jar 長さ: 556198 SHA-1: 4a6be13368bb64c5a0b0460632d228a1a915f58f パス: D:\Work\Eclipse\LibraryName\libs\android-support-v4 .jar 長さ: 385685 SHA-1: 48c94ae70fa65718b382098237806a5909bb096e Jar が一致しません! 依存関係を修正する
奇妙なことに、android-support-v4.jar ファイルは、アプリケーション プロジェクトの「参照ライブラリ」に表示されますが、ライブラリの「Android プライベート ライブラリ」に表示されます。