在android:名称中的领导点真的需要?

可能重复:
什么是注册活动时的“点”

在所有的Android例子中,活动,服务等名称都以点开头:

<activity android:name=".MyActivity" /> 

我忘了在所有的Android项目中都这样做 – 但是它们确实很完美。

我的问题:这个领先的点真的需要吗?

编辑:这是我的一个应用程序的一个小快照的例子。 这个应用程序工作完美 它不使用合格的名称,也不使用点:

 <activity android:exported="false" android:name="Tankvorgaenge" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> <activity android:name="Tankvorgangdetails" /> <activity android:name="Tankvorgangdetailsbearbeiten" /> <activity android:name="TankvorgangUebersicht" /> <activity android:name="Verbrauch" /> <service android:name="MyService" /> 

Solutions Collecting From Web of "在android:名称中的领导点真的需要?"

当且仅当指定的类不是应用程序中的子包的一部分时,省略点并不完全限定包/类名称才能工作。

如果您的应用程序包名称是com.example.myapp ,并且您有一个活动类com.example.myapp.MyActivity

  1. android:name="MyActivity"将工作。
  2. android:name=".MyActivity"将工作。
  3. android:name="com.example.myapp.MyActivity"将工作。

但是,如果在源代码树中的子包中具有相同的应用程序包和活动类,例如com.example.myapp.myactivities.MyActivity情况会发生变化。

  1. android:name=".myactivities.MyActivity"将工作
  2. android:name="com.example.myapp.myactivities.MyActivity"将工作
  3. android:name="MyActivity" 将不起作用
  4. android:name="myactivities.MyActivity" 不起作用

3不起作用,因为这会推断出您的类名实际上是com.example.myapp.MyActivity就像上面的第一个例子。 这个名字的类将不会被find,你会得到一个错误。

4不起作用,因为它看起来像一个完全限定的类名,也就是说系统将它解释为myactivities.MyActivity是完全限定的名称本身,而不是com.example.myapp.myactivities.MyActivity的真实名称。

你需要在这里的领先点澄清,你使用的是相对path,而不是绝对path。 如果只指定一个没有包信息的类名,系统就会推断出该类位于应用程序包层次结构的根目录下。

点是使用package_name的相对path给出package_name 。 您可以使用com.yourActivityPackage.MyActivityreplace.MyActivity

是的, activity[android:name]应该指定一个完全限定的package.Class ,或者如果它以一个点开始,那么它会被附加到application的包中。

看文档

这是必需的。 它是软件包名称的缩写。 android:name应该指定完整的类名称。 通过放入一个小圆点,我们可以指出下面的类名在清单中上面声明的“包”内。