Нужно ли название активности в AndroidManifest.xml начинаться с точки?

Нужно ли начинать имя активности с точки (..) В файле манифеста.? Например, активность ContactManager начинается с '.'

<activity android:name=".ContactManager" android:label="@string/app_name"> 

Где в качестве действия ContactAdder нет точки

 <activity android:name="ContactAdder" android:label="@string/addContactTitle"> 

В файле манифеста примера ContactManager http://developer.android.com/resources/samples/ContactManager/AndroidManifest.html

ОБНОВЛЕНИЕ: Если начинается имя операции. Он добавляется к имени пакета, чтобы стать полностью квалифицированным именем, но что произойдет, если он не начинается с '.'

Мне тоже было любопытно, и я искал его в исходном коде Android.

В файле tools/aapt/Resource.cpp я нашел то, что похоже на соответствующий код в platform/frameworks/base repository. Соответствующей функцией является fullyQualifyClassName , вызываемая massageManifest .

Правило, которое оно применяет, объясняется в блоке комментариев в функции fullyQualifyClassName :

 // asdf --> package.asdf // .asdf .ab --> package.asdf package.ab // asdf.adsf --> asdf.asdf 

Объясняя это правило, мы имеем:

  1. Если имя начинается с точки, всегда префикс его с пакетом.
  2. Если имя имеет точку в другом месте, не префикс.
  3. Если имя не имеет точки вообще, также префикс его с пакетом.

Итак, чтобы ответить на ваш вопрос: до тех пор, пока нет точки где-либо еще, оба способа написания названия деятельности должны иметь тот же эффект.


В дополнение, функция massageManifest показывает, где применяется это правило:

  • В элементе application атрибуты name и backupAgent .
  • В activity , service , receiver , provider и элементах activity-alias в атрибуте name .
  • В элементе targetActivity атрибут targetActivity .

В справочной системе Android Dev Guide <activity> :

Имя класса, реализующего действие, подкласс Activity. Значение атрибута должно быть полностью квалифицированным именем класса (например, «com.example.project.ExtracurricularActivity»). Однако в качестве сокращения, если первым символом имени является период (например, «.ExtracurricularActivity»), он добавляется к имени пакета, указанному в элементе. По умолчанию нет. Имя должно быть указано.

Недавно я понял концепцию пакета приложений в Android и ответ на этот вопрос, подумал, что должен поделиться им.

Если пакет приложений (указанный в манифесте) совпадает с пакетом java, в котором присутствует действие, то нет необходимости указывать полное имя пакета в манифесте для действий. Если имя пакета приложения отличается от имени пакета java, тогда имя операции должно быть заполнено именем пакета.

Это сообщение в блоге предоставляет информацию о пакете приложений и java-пакетах в android.

http://blog.javia.org/android-package-name/comment-page-1/#comment-14063