android中的领先点:名字真的需要吗?

时间:2012-08-26 15:55:25

标签: android manifest

  

可能重复:
  What's the “dot” for when registering an Activity

在所有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" />

4 个答案:

答案 0 :(得分:22)

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

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

  1. android:name="MyActivity"可以使用。
  2. android:name=".MyActivity"可以使用。
  3. android:name="com.example.myapp.MyActivity"可以使用。
  4. 但是如果你的源代码树中的子包中有相同的应用程序包和一个活动类,例如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" 无法使用
    5. 3不起作用,因为这会推断出您所说的类名实际上是com.example.myapp.MyActivity,就像上面的第一个例子中一样。找不到具有此名称的类,您将收到错误。

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

      你需要这里的前导点来阐明你使用的是相对路径,而不是绝对路径。如果您只指定一个没有包信息的类名,系统会推断该类位于应用程序包层次结构的根目录中。

答案 1 :(得分:2)

点是使用应用程序的相对路径给出package_name。您可以将.MyActivity替换为com.yourActivityPackage.MyActivity

答案 2 :(得分:1)

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

请参阅doc

答案 3 :(得分:0)

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