Манифест Android: должен ли пакет Activity находиться в основном пакете apk? - PullRequest
5 голосов
/ 25 января 2012

Я вхожу в большой существующий проект Android. Манифест выглядит примерно так:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.group1.package1">
    <application ... >
    <activity android:name="com.company.group1.MyActivity />
    <service android:name="com.company.group2.blah.MyService" />
    <provider android:name="com.company.group3.etc.MyProvider" />
    ... more fully-qualified activities ...
    </application>
</manifest>

В сущности, сущности повсюду, упакованы и полностью квалифицированы. Конечно, это нарушает все виды соглашений, но так или иначе это работает просто отлично. Я пытался найти заявление от Google, что это плохая идея, но я не нашел ни одной официальной рекомендации по этому поводу или каких проблем это вызовет.

Переименование пакета com.company не является хорошим вариантом, потому что у компании есть несколько приложений.

Мой вопрос: есть ли какая-либо иная причина, кроме соглашения, для организации проекта более разумным способом? Я ожидаю откат на массовое переименование из-за проблем с историей управления исходным кодом и еще много чего.

1 Ответ

3 голосов
/ 25 января 2012

Нет, название действия не обязательно должно быть в основном пакете apk. Например, можно указать действие, определенное во внешнем банке, в котором используется совершенно другое имя пакета.

Фактическое требование согласно AndroidManifest.xml документации состоит в том, что имя действия «должно быть полным именем класса».

Однако, как продолжает упоминать документ, в большинстве случаев есть сокращение, при котором вам не нужно постоянно указывать полное имя класса. И это, предшествуя имени с «.». (т.е. "<activity android:name=".MyActivity />")

...