2014-01-22 4 views
0

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

com.example.domain1, com.example.domain2 и т.д.

В манифесте я определяю:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.domain1" 

.... и domain2:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.domain2" 

профи blem Я столкнулся с тем, что как только я изменяю имя базового пакета из domain1 в domain2, мне нужно переименовать все мои пакеты в папку src, а также макеты. Я ищу, чтобы сохранить ту же базовую упаковку com.example и распространять различные приложения под своими поддоменами.

Есть ли лучший способ?

Уточнение: При изменении имени пакета файл ресурсов изменяется с com.example.R на com.example.domain2.R. Это означает, что я должен зайти во все классы и макеты src java и т. Д. И обновить сгенерированное расположение файла R. Это не удобно.

ответ

1

Я закончил свой основной проект как библиотеку, а затем создал проект для каждого домена и связался с библиотекой.

Не нужно играть с манифестом или файлом R.java.

Благодаря @ Tenfour04 для указания меня в правильном направлении!

+0

Вы можете уточнить, как вы это сделали? –

0

В вашем манифесте каждое действие, сервис, поставщик и получатель имеет атрибут name. По умолчанию они используют ярлык, например ".MainActivity" Ведущий . является ярлыком для имени package на верхнем уровне манифеста.

Так что, если вы не хотите переименовывать все эти пакеты в папку src, просто введите явные имена для Деяний, Службы, Провайдеров и Получателей в вашем манифесте, например android:name="com.example.sharedmultiprojectdomainname.MainActivity".

+0

Да, это решает файл манифеста. Но мои пакеты src по-прежнему com.example, а не com.example.domain1, который, как мне кажется, требуется для спецификации Android. – checklist

+0

Я не думаю, что это правда. Google Play не позволяет вам загружать их? – Tenfour04

+0

Если вы используете какие-либо библиотеки, они полны всех типов исходных пакетов, и у меня никогда не было проблем с этим. Если вы используете SDK для Facebook, вам нужно добавить com.facebook.LoginActivity к вашему манифесту, и это отлично работает. – Tenfour04

0

Если вы используете Gradle в качестве вашей системы сборки, вы можете включить варианты сборки в свою сборку, что позволит решить проблемы с пакетом. Подробнее об этом можно узнать здесь Google I/O speech

Надеюсь, это поможет.

+0

Извините, но я не использую Gradle. В любом случае, прежде чем перейти к решению сборки, я должен знать, как решить вручную :-) – checklist

+0

Я понимаю. Но Gradle поддерживает его из коробки, поэтому вам не нужно делать это вручную. Это уже сделано для вас. –

Смежные вопросы