42

別の Android プロジェクト内から使用したい Android ライブラリ プロジェクトがあります。

ライブラリには、その AndroidManifest で宣言された Activity があります。2番目のプロジェクト内で次のことを試すと:

        Intent intent = new Intent(this, ReaderActivity.class);
        startActivity(intent);

次の例外が発生します。

 java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.digitalpages.reader.demo/br.com.digitalpages.reader.demo.ReaderDemoActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {br.com.digitalpages.reader.demo/br.com.digitalpages.reader.ReaderActivity}; have you declared this activity in your AndroidManifest.xml?
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
...
 Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {br.com.digitalpages.reader.demo/br.com.digitalpages.reader.ReaderActivity}; have you declared this activity in your AndroidManifest.xml?
     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
...

別のプロジェクトからアクティビティを開くにはどうすればよいですか?

編集:ユーザーの回答により、2番目のプロジェクトに次の行を追加しました

<uses-library android:name="br.com.digitalpages.reader" android:required="true" />

しかし、それはまだ動作しません

4

8 に答える 8

41

独自の AndroidManifest.xml に <activity> を含める必要があると思います-ライブラリから取得されるとは思いません。私はその便利なリファレンスを持っていません。

更新:これは公式の解決策です。ドキュメントから:

マニフェスト ファイルでのライブラリ コンポーネントの宣言

アプリケーション プロジェクトのマニフェスト ファイルでは、ライブラリ プロジェクトからインポートされた、アプリケーションが使用するすべてのコンポーネントの宣言を追加する必要があります。たとえば、、、、、など、および同様の要素を宣言 する<activity>必要が あります。<service><receiver><provider><permission><uses-library>

宣言は、必要に応じて完全修飾パッケージ名でライブラリ コンポーネントを参照する必要があります。

于 2011-05-27T21:00:12.303 に答える
21
Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setComponent(new ComponentName("packagename//ex-com.hello", 
                                     "classname//ex-com.hello.ExampleActivity"));
startActivity(intent);

そして、ライブラリでアクティビティを宣言したことを確認してください。現在のプロジェクトのマニフェストでライブラリ アクティビティを宣言する必要はありません。

于 2012-03-22T12:27:29.620 に答える
4

マニフェストに追加しましたか?

http://developer.android.com/guide/topics/manifest/uses-library-element.html

于 2011-05-27T21:00:25.793 に答える
3

これは機能します:

あなたのライブラリに、あなたのカスタムを入れてくださいActivity

public class MyLibraryActivity extends ListActivity { ... }

マニフェストに入れる必要はありません。呼び出し元の Android プロジェクトで、空の (ダミーの) ラッパーを作成します。

public class MyActivity extends MyLibraryActivity { } 

このクラスへの参照をマニフェストに追加します。

<activity android:name="my_package.MyActivity" ... />
于 2012-01-25T21:01:11.470 に答える
1

質問がかなり古いことは承知していますが、これは同じ問題を思いついた私のような人々に役立つと思います。

Eclipse を使用して、ライブラリ間でコードとアクティビティを共有する最良の方法は、おそらく次の Android ドキュメントに記載されている方法です。

ADT を使用した Eclipse からのプロジェクトの管理

于 2012-04-25T16:57:27.793 に答える
0

(マニフェストではなく) アクティビティのコードだけをインポートしてから、2 番目のプロジェクトのマニフェストで (ライブラリの) アクティビティを宣言する必要があります。

于 2011-05-27T21:02:28.027 に答える