マニフェスト内の Android パッケージと、使用するクラスの Java パッケージは別の概念です。便宜上、これらはたまたまデフォルトで同じになっています。ただし、それらは完全に異なり、無関係である可能性があります。
org.example.myappアクティビティ、サービス、コンテンツ プロバイダー、およびブロードキャスト リスナーを宣言するときに、次の 3 つの方法のいずれかでコンポーネント クラス名を指定できます(Android パッケージが .
- クラス名、つまり
MyActivity. OS は、クラスが Android パッケージと同じ名前の Java パッケージにあると想定し、完全修飾クラス名に解決しorg.example.myapp.MyActivityます。この形式は と同等であることに注意してください.MainActivity...
- 相対クラス名、つまり
.ui.MyActivity. OS は、クラスが Android パッケージと同じ名前の Java パッケージ内にある Java パッケージ内にあると想定し、. として完全修飾クラス名に解決しorg.example.myapp.ui.MyActivityます。先頭.に注意してください。重要です。そうしないと、失敗します...
- 完全修飾、つまり
com.android.example.myapp.MyActivity. OS はこれをロードする必要があるクラスの正確な名前として使用し、Android パッケージ名を無視します。
Android パッケージ名と Java パッケージ名が混同されているのは、2 つの独立した概念に同じ用語を使用しているためです。のドキュメントでは、その 2 つのコンポーネントを and とComponentName呼んでいるため、簡単にはなりませんが、実際にはandです (上記の 3 つのバリアントのいずれかが受け入れられます)。packageclassAndroid packageJava class
前文が長くなったので、質問への答えは簡単です。
マニフェストで複数のパッケージを宣言することはできません。ただし、その必要もありません。Android パッケージ名は、OS に関する限り、実際にはアプリケーションの ID であり、それ以上のものではありません。コードでは任意の Java パッケージを使用できます。
警告:
すべてのリソースの識別子を含む自動生成されRたクラスは、Android パッケージと同じ名前の Java パッケージにデフォルトで生成されます。したがって、Android パッケージ名と Java パッケージ名が異なる場合は、次の 2 つのオプションがあります。
RAndroid パッケージの名前を使用して、Java パッケージからクラスを明示的にインポートします。
apptコマンド ラインからツールを使用し、--custom-packageオプションを使用してRファイルをメインの Java パッケージに生成します。(Android のドキュメントにはこのツールに関する情報があまりないため、eLinux にリンクしています。しかし、これは Android SDK の一部です)
これは 2 つのパッケージ名が関連していることの証明のように思えるかもしれませんが、これも単なるツールの便宜上のものです。悲しいことに、このaaptツールではクラスのターゲット Java パッケージを明示的に設定できますが、REclipse と IntelliJ の両方がそのオプションを隠しているため、混乱がより完全になります。