web-dev-qa-db-ja.com

Android:複数のJava Manifestへのパッケージを含む

私が開発しているアプリには、7つのJavaパッケージに編成された多くのアクティビティがあります。元々Javaパッケージとしてさまざまなプロジェクト。

今、私はすべてのパッケージを1つのプロジェクトにまとめたいと思っています。 srcフォルダーに新しいパッケージを追加すると、すべてのR.id. *値に対してエラーが発生します(「Rを解決できません」)。

私の本能は、プロジェクトマニフェストに入れなければならない空想があることを教えてくれますが、その方法を伝えるためのリソースをオンラインで見つけることができません。

(注: this および this を読んだことがありますが、プロジェクトに追加のパッケージを追加する方法を理解できませんでした。)

31
HappyGeisha

アクティビティの上部にあるimportステートメントが正しいRファイルを参照していることを確認してください。各プロジェクトには独自のRファイルがあるため、あるプロジェクトから別のプロジェクトにアクティビティをコピーすると、古いプロジェクトのRファイルを参照しようとします。

マニフェストに異なるパッケージを明示的に含める必要はありません。 2つの異なるパッケージのアクティビティを含めるには、次のように言います。

com.example.package1.Activity1
com.example.package2.Activity2

次のことができます。

<manifest package="com.example" . . . >
  <application . . .>
    <activity Android:name=".package1.Activity1" . . . />
    <activity Android:name=".package2.Activity2" . . . />
  </application>
</manifest>
38
Cheryl Simon

Androidは、アプリのマニフェストで宣言されたパッケージに「R」という名前のクラスを自動的に作成します。すべてのクラスがそのパッケージ内にある場合、「R」を明示的にインポートする必要はありません。ただし、他のパッケージにクラスがある場合、デフォルトでは表示されないため、含める必要があります

 import <app-package>.R;

または

 import <app-package>.*;

(もちろん<app-package>を実際の名前に置き換えます)。

アプリに library projects を含めると、theirホームパッケージ内で生成される独自の「R」クラスを参照できます。 1つの最終アプリにバンドルする必要がある複数の独立したアクティビティがある場合、手動で物事をマージするのではなく、ライブラリプロジェクトの使用を真剣に検討する必要があります。それはあなたにとって人生をずっと楽にしてくれるでしょう。

15
beekeeper

マニフェストファイルを変更しても、問題が解決しない場合があります。それを回避するには、すべてのクラスにimport com.example.R;を追加する必要があります。

例:package2のMainActivity.class

pakage com.example.package2.Activity2
import com.example.R;

(package1のTestActivity.class)

pakage com.example.package1.Activity1
import com.example.R;
1
Omar.LKS

APK Builderを使用しています。すべてのxmlリソースは、aaptによって自動生成されたJavaファイルで宣言されています。そのパッケージ名は、Androidマニフェストパッケージ名です。

それから、xmlファイルにパッケージ名が含まれていないことがわかりました。すべてのxmlファイルは単なるxmlファイルです。次に、aaptは、1つのRクラスにすべてのXMLリソースを含むRクラスを生成します。このクラスのパッケージ名は、マニフェスト内の名前です。

したがって、package-name.Rをインポートするか、プロジェクト全体で1つのパッケージを使用します。

0

レイアウト-> main.xmlファイルが正しいこと、およびAndroid:id="@+id/whateverIdHasCausedYouTheError"

R.Javaファイルは、id ..とbamを含むように更新され、エラーが消えます。

0
MaybeBaby