Android:包括多个要清单的 Java 包

Posted

技术标签:

【中文标题】Android:包括多个要清单的 Java 包【英文标题】:Android: Including multiple Java Packages to Manifest 【发布时间】:2011-04-25 12:39:27 【问题描述】:

我正在开发的应用程序有许多活动,这些活动组织成七个 java 包。最初,我将 java 包中每组活动的所有编码和内容编写为不同的项目。

现在我想将所有包放在一个项目中。当我将新包添加到 src 文件夹时,我的所有 R.id.* 值都会出现错误(“R 无法解析”)。

我的直觉告诉我,我必须在项目清单中添加一些花哨的东西,但我在网上找不到任何资源来告诉我如何操作。

(注意:我已经阅读了this 和this,但我仍然不知道如何向我的项目添加额外的包。)

【问题讨论】:

你尝试过干净的构建吗?并在您添加的类中更新您的 R 文件的包含路径?如果您之前在不同的项目中进行过活动,那么 R 文件也可能位于不同的位置。 我已经去 Project > Clean... 六次希望它能正常工作... 不走运。 R 的包含路径怎么样?对吗? 如何更新 R 文件的包含路径?我尝试禁用“自动构建”,将原始项目中的 gen 文件夹的内容复制/粘贴到新项目中,这会使错误消失,但是一旦我进行另一次清理或启用“自动构建”,它就会消失?另外,如何将新的 java 包添加到清单中? 不要那样做!您永远不应该手动编辑 R 文件。包含路径是指出现在活动文件顶部的导入语句。它是否引用了正确的 R 文件?另外,您引用的参考文献是否包含在新项目中? 【参考方案1】:

我正在使用 APK Builder,所有 xml 资源都由 aapt 在自动生成的 java 文件中声明。它的包名就是你猜的,android manifest 包名。

然后我突然意识到 xml 文件没有包名。所有 xml 文件都只是 xml 文件。然后 aapt 在一个 R 类中生成一个包含所有 XML 资源的 R 类。这个类的包名就是manifest里的那个。

因此,要么导入 package-name.R,要么只为整个项目使用一个包。

【讨论】:

【参考方案2】:

即使我们更改清单文件,问题也可能仍然存在。 为了避免这种情况,我们必须在我们所有的类中添加一个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;

【讨论】:

【参考方案3】:

确保 Activity 顶部的 import 语句引用了正确的 R 文件。每个项目都有自己的 R 文件,因此如果您将 Activity 从一个项目复制到另一个项目,它仍会尝试从旧项目中引用 R 文件。

您不需要在清单中明确包含不同的包。要包含来自两个不同包的活动,请说:

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>

【讨论】:

哦,Mayra,你太有帮助了!!再次感谢! 是的,代码可以工作,但 android 仍然给出红色错误标记(但会编译和运行) 我正在使用 APK Builder 并且所有 xml 资源都由 aapt 在自动生成的 java 文件中声明。它的包名就是你猜的,android manifest 包名。【参考方案4】:

检查布局 -> main.xml 文件是否正确并包含android:id="@+id/whateverIdHasCausedYouTheError"

然后将更新 R.java 文件以包含 id.. 和 bam,您的错误应该会消失。

【讨论】:

【参考方案5】:

Android 会自动在应用清单中声明的​​包中创建名为“R”的类。当您的所有类都在该包中时,您将永远不必显式导入“R”。但是,如果您在其他包中有类,则默认情况下它们不会看到它,您必须包含

 import <app-package>.R;

 import <app-package>.*;

(当然用实际名称替换&lt;app-package&gt;)。

如果您在您的应用程序中包含library projects,那么他们可以引用他们自己的“R”类,这些类将在他们的 home 包中生成。如果您有几个独立的活动需要捆绑到一个最终的应用程序中,您应该认真考虑使用库项目而不是手动合并事物。它可以让您的生活更轻松。

【讨论】:

我过去曾尝试使用库项目,但它对我不起作用。这是因为我所有的活动相互引用,一旦我将项目创建为库,那么引用就变成了一个方向。我是一个编程菜鸟,所以这可能没有任何意义,但无论如何感谢您的帮助:) 不,这是库的一个常见问题——它们必须非常独立,这限制了它们的用处。我只是认为在这种情况下它可能有用,因为您说您已经孤立地开发了每个活动,因此我认为它们已经是独立的。如果它们不能让您的生活更轻松,那么使用它们就没有百分比。

以上是关于Android:包括多个要清单的 Java 包的主要内容,如果未能解决你的问题,请参考以下文章

Create an Android library

清单合并失败,Android Studio 中出现多个错误

androidstudio中导入的jar包没有主清单属性怎么办

androidstudio中导入的jar包没有主清单属性怎么办

java 多个类文件如何打包成jar

如何重命名android包名称? [复制]