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>.*;
(当然用实际名称替换<app-package>
)。
如果您在您的应用程序中包含library projects,那么他们可以引用他们自己的“R”类,这些类将在他们的 home 包中生成。如果您有几个独立的活动需要捆绑到一个最终的应用程序中,您应该认真考虑使用库项目而不是手动合并事物。它可以让您的生活更轻松。
【讨论】:
我过去曾尝试使用库项目,但它对我不起作用。这是因为我所有的活动相互引用,一旦我将项目创建为库,那么引用就变成了一个方向。我是一个编程菜鸟,所以这可能没有任何意义,但无论如何感谢您的帮助:) 不,这是库的一个常见问题——它们必须非常独立,这限制了它们的用处。我只是认为在这种情况下它可能有用,因为您说您已经孤立地开发了每个活动,因此我认为它们已经是独立的。如果它们不能让您的生活更轻松,那么使用它们就没有百分比。以上是关于Android:包括多个要清单的 Java 包的主要内容,如果未能解决你的问题,请参考以下文章
androidstudio中导入的jar包没有主清单属性怎么办