Нужно ли название активности в 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
ОБНОВЛЕНИЕ: начинается с имени действия. он добавляется к имени пакета, чтобы стать полностью квалифицированным именем, но что произойдет, если он не начинается с..
Ответы
Ответ 1
Мне тоже было любопытно, и я искал его в исходном коде 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
Объясняя это правило, мы имеем:
- Если имя начинается с точки, всегда префикс его с пакетом.
- Если имя имеет точку в другом месте, не префикс.
- Если имя не имеет точки вообще, также префикс его с пакетом.
Итак, чтобы ответить на ваш вопрос: до тех пор, пока в другом месте нет точки, оба способа записи названия деятельности должны иметь тот же эффект.
В качестве дополнительной функции massageManifest
показано, где применяется это правило:
- В элементе
application
атрибуты name
и backupAgent
.
- В
activity
, service
, receiver
, provider
и activity-alias
элементах по атрибуту name
.
- В элементе
activity-alias
в атрибуте targetActivity
.
Ответ 2
Из Android Dev Guide < активность > ссылка:
Название класса, который реализует деятельность, подкласс Деятельности. Значение атрибута должно быть полностью имя квалифицированного класса (например, "Com.example.project.ExtracurricularActivity" ). Однако, как стенография, если первый характер имени - это период (для например, ". ExtracturricularActivity" ), он добавляется к имени пакета указанный в элементе. По умолчанию нет. Имя должно быть указано.
Ответ 3
Недавно я понял концепцию пакета приложений в Android и ответ на этот вопрос, подумал, что должен поделиться им.
Если пакет приложений (указанный в манифесте) совпадает с пакетом java, в котором присутствует действие, то нет необходимости указывать полное имя пакета в манифесте для действий. Если имя пакета приложения отличается от имени пакета java, тогда имя активности должно быть заполнено именем пакета.
Это сообщение в блоге предоставляет информацию о пакете приложений и java-пакетах в android.
http://blog.javia.org/android-package-name/comment-page-1/#comment-14063