在一个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" >
答案 0 :(得分:3)
清单中的Android包和您使用的类的Java包是不同的概念。为方便起见,默认情况下它们恰好相同。但是,它们可能完全不同且无关。
当您声明活动,服务,内容提供者和广播监听器时,您可以使用以下三种方式指定组件类名称(假设您的Android包为org.example.myapp
)
MyActivity
。操作系统将假设您的类与Java包具有相同的名称,并将其解析为完全限定的类名org.example.myapp.MyActivity
。请注意,此表单相当于.MainActivity
,这是... .ui.MyActivity
。操作系统将假设您的类位于Java包中,该包位于与Android包同名的Java包中,并将其解析为完全限定的类名org.example.myapp.ui.MyActivity
。注意领先.
,这很重要!否则你会落到...... com.android.example.myapp.MyActivity
。操作系统将使用它作为需要加载的类的确切名称,并忽略Android包名称。 Android包名称和Java包名称之间的混淆是由于对两个独立概念使用相同的术语。 ComponentName
的文档并没有让它变得更容易,因为它将其称为package
和class
两个组件,而它们实际上是Android package
和Java class
(其中)上述三种变体中的任何一种均可接受。)
使用更长的序言,您的问题的答案很简单:
您无法在清单中声明多个包。但是,您也不需要。就操作系统而言,Android软件包名称实际上是应用程序的标识,仅此而已。您可以在代码中使用任何Java包。
警告:
默认情况下,在与您的Android软件包同名的Java软件包中生成包含所有资源标识符的自动生成的R
类。因此,如果您的Android软件包名称和Java软件包名称不同,则有两个选项:
R
类
appt
工具和--custom-package
选项在主Java包中生成R
文件。 (我正在链接到eLinux,因为Android文档没有太多关于该工具。但它是Android SDK的一部分)虽然这可能看起来证明两个包名称是相关的,但这又是工具所采用的便利。遗憾的是,虽然aapt
工具允许为R
类显式设置目标Java包,但Eclipse和IntelliJ都隐藏了该选项,这使得混淆更加完整。
答案 1 :(得分:1)
您只需导入包。 但是,如果我没记错的话,默认情况下不会看到其他包中的类。你必须包括
import <app-package>.R;
app-package是应用程序包的名称。 (没有括号)
还要确保您拥有的任何import语句都引用了正确的项目R文件。
答案 2 :(得分:0)
我认为不可能。你可以这样做,如果package =“com.example.pack2”并且你想要声明一个包,它是包package =“com.example.pack3”,你必须使用完整路径 比如com.example.pack3.Activity!
答案 3 :(得分:0)
我在市场上有一个应用程序,其中包含5个软件包,我只将带有活动的软件包放入清单中,如果有帮助,我没有遇到任何问题
如果你要把你的应用放在Google Play上,它就不会接受以...开头的软件包名称 com。示例
这是一个保留包名称