1

1 つの Android アプリケーションで複数のパッケージを使用する正しい方法は何ですか?

複数のパッケージがある場合、以下の例のようにすべての名前をマニフェスト タグに入れるのは正しいですか?

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.application"
    package="com.example.pack2"
    package="com.example.pack3"
    android:versionCode="1"
    android:versionName="1.0" >
4

4 に答える 4

3

マニフェスト内の 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 の両方がそのオプションを隠しているため、混乱がより完全になります。

于 2013-03-28T03:35:18.210 に答える
1

パッケージをインポートするだけです。ただし、私の記憶が正しければ、他のパッケージのクラスはデフォルトでは表示されません。含める必要があります

import <app-package>.R;

app-package はアプリケーション パッケージの名前です。(ブラケットなし)

また、インポート ステートメントが正しいプロジェクト R ファイルを参照していることを確認してください。

于 2013-03-28T03:01:52.760 に答える
0

5 つのパッケージを含むアプリを市場に出しましたが、アクティビティを含むパッケージのみをマニフェストに入れました。

また、アプリを Google Play に配置する場合、com.example で始まるパッケージ名は受け入れられません。

これは予約済みのパッケージ名です

于 2013-03-28T03:28:58.437 に答える
0

ありえないと思います。package="com.example.pack2" で、パッケージ package="com.example.pack3" であるアクティビティを宣言する場合は、com.example.pack3 のようなフル パスを使用する必要があります。アクティビティ!

于 2013-03-28T03:03:09.443 に答える