9

重複の可能性:
アクティビティを登録するときの「ドット」は何ですか

すべてのAndroidの例では、アクティビティ、サービスなどの名前はすべてドットで始まります。

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

すべてのAndroidプロジェクトでこれを行うのを忘れましたが、完全に機能します。

私の質問:この先頭のドットは本当に必要ですか?

編集:これは私のアプリの1つからの小さなスナップショットの例です。このアプリは完璧に動作します。修飾名は使用せず、ドットも使用しません。

<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

4 に答える 4

23

ドットを省略し、パッケージ/クラス名を完全に修飾しないことは、指定されたクラスがアプリケーション内のサブパッケージの一部でない場合にのみ機能します。

アプリケーションパッケージ名が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" 動作しないでしょう

com.example.myapp.MyActivity3は機能しません。これは、意味するクラス名が実際には上記の最初の例のようであると推測されるためです。この名前のクラスは見つからず、エラーが発生します。

myactivities.MyActivity4は完全修飾クラス名のように見えるため機能しません。つまり、システムはそれを、の実際の名前ではなく、完全修飾名自体であると解釈しcom.example.myapp.myactivities.MyActivityます。

絶対パスではなく相対パスを使用していることを明確にするために、ここで先頭のドットが必要です。パッケージ情報をまったく含まないクラス名のみを指定すると、システムはそのクラスがアプリケーションパッケージ階層のルートにあると推測します。

于 2012-08-26T19:21:11.180 に答える
2

ドットは、アプリが与える相対パスを使用することですpackage_name.MyActivityで置き換えることができますcom.yourActivityPackage.MyActivity

于 2012-08-26T16:01:15.587 に答える
1

はい、はactivity[android:name]完全修飾を指定する必要がありますpackage.Class。または、ドットで始まる場合は、applicationのパッケージに追加されます。

ドキュメントを参照してください

于 2012-08-26T16:02:20.803 に答える
0

必須です。パッケージ名の略称です。android:nameは、完全なクラス名を指定することになっています。先頭にドットを付けることで、次のクラス名が上記のマニフェストで宣言された「パッケージ」内にあることを示すことができます。

于 2012-08-26T15:59:37.523 に答える