Конфигурации сборки Android для нескольких клиентов

У меня есть приложение для Android, которое нужно доставить нескольким клиентам. Для каждого клиента у меня есть разные графические и конфигурационные XML-файлы, в которых указаны функции и URL-адреса.

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

Проект построен с помощью Maven.

Любые идеи?


person peceps    schedule 26.09.2011    source источник


Ответы (2)


В итоге я использовал профили maven и свойства «renameManifestPackage» и «resourceOverlayDirectory» плагина android maven.

Значение res/ dir по умолчанию переопределяется параметром «resourceOverlayDirectory», характерным для каждого клиента.

Это сработало отлично.

<!-- profile for zurich -->
<profile>
  <id>zurich</id>
  <properties>
    <customer>zurich</customer>
    <customerPackage>zurich.com</customerPackage>
    <customerResources>customers/${customer}/res</customerResources>
    <customerApkName>${customer}-${project.artifactId}</customerApkName>
  </properties>
</profile>

и в сборке у меня есть:

<build>
  <sourceDirectory>src</sourceDirectory>

  <!-- the name of the generated apk and jar -->
  <finalName>${customerApkName}-${project.version}</finalName>

  <pluginManagement>

    <plugins>

  <!-- customer specific manifest and package -->
  <plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>maven-android-plugin</artifactId>
    <configuration>
      <renameManifestPackage>${customerPackage}</renameManifestPackage>
      <resourceOverlayDirectory>${customerResources}</resourceOverlayDirectory>
    </configuration>
  </plugin>

    </plugins>

  </pluginManagement>
person peceps    schedule 27.09.2011
comment
это копирует фактическую папку res или все они копируются в папку target? - person Ovidiu Latcu; 29.01.2013
comment
Здорово. У вас возникают проблемы при попытке установить два приложения на одно устройство? - person Eugen Martynov; 04.03.2013
comment
@EugenMartynov нет, имена пакетов разные. - person peceps; 30.05.2013

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

person Nikolay Elenkov    schedule 26.09.2011
comment
Да, это обычный способ, но поскольку ресурсы Android связаны статически, это не так просто сделать. - person peceps; 26.09.2011
comment
Затем вы переопределяете весь шаг «связывания». В конце концов, он просто вызывает aapt для группы файлов, так что это должно быть возможно. Если нет, всегда есть библиотечные проекты для Eclipse или Ant. Проверьте, как они это делают в Ant, должно дать вам некоторые идеи. - person Nikolay Elenkov; 26.09.2011