Обязательно ли имя активности в AndroidManifest.xml начинать с точки? - PullRequest
30 голосов
/ 31 августа 2010

Обязательно ли начинать имя действия с точки ('.') В файле манифеста.? например активность 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

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

Ответы [ 3 ]

36 голосов
/ 20 декабря 2011

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

Я нашел соответствующий код в репозитории platform/frameworks/base, в файле tools/aapt/Resource.cpp. Соответствующая функция - fullyQualifyClassName, вызывается massageManifest.

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

// asdf     --> package.asdf
// .asdf  .a.b  --> package.asdf package.a.b
// asdf.adsf --> asdf.asdf

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

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

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


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

  • В элементе application, атрибутах name и backupAgent.
  • В элементах activity, service, receiver, provider и activity-alias, в атрибуте name.
  • В элементе activity-alias, в атрибуте targetActivity.
15 голосов
/ 31 августа 2010

Из справочника по <100> Android Guide :

Имя класса, который реализует деятельность, подкласс деятельности. Значение атрибута должно быть полностью квалифицированное имя класса (например, "Com.example.project.ExtracurricularActivity"). Однако, как сокращение, если первый символ имени - точка (для Например, ".ExtracurricularActivity"), добавляется к названию пакета указано в элементе. Там нет по умолчанию. Имя должно быть указано.

3 голосов
/ 17 января 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...