Одновременное создание многих похожих файлов Android .apk?

#android #eclipse

#Android #eclipse

Вопрос:

У меня есть один проект Android, из которого мне нужно собрать много файлов .apk. Файлы .apk отличаются друг от друга всего несколькими способами:

  1. в файле манифеста Android есть несколько значений, которые отличаются друг от друга
  2. некоторые из apk-файлов могут исключать некоторые файлы в папке / res
  3. другое название пакета

Каков наилучший способ автоматического создания всех этих разных файлов .apk?

Спасибо!

Ответ №1:

Используйте плагин Android Maven. Он поддерживает проекты библиотеки Android.

  1. Создайте многомодульный проект.
  2. Поместите все распространенные классы в один модуль (библиотеку).
  3. Создайте модуль для каждого приложения, которое вы хотите распространять, и сделайте его зависимым от модуля lib.

Вот пример:https://github.com/jayway/maven-android-plugin-samples/tree/master/libraryprojects

(Вам нужно будет создать несколько модулей ‘libraryprojects-mainapp’)

Ответ №2:

Если вы используете git, вы можете создавать разные ветки и проверять каждую из них перед сборкой. Вы также можете написать сценарий оболочки для автоматизации этого, если вы используете Mac или Linux.

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

Я не знаю, облегчает ли это вам задачу, но это был бы один из способов.

Комментарии:

1. это то, что я сделал, но мне действительно любопытно, есть ли способ получше. пожалуйста, просветите меня.

Ответ №3:

2011 год — это давно .. но, похоже, решения Eclipse / Netbeans для этого нет. Недавно я столкнулся с такой же проблемой в проекте cordova на Netbeans.

В Android Studio bleeding Edge есть удобное решение под названием «вкусы«.

Он основан на иерархии зеркальных каталогов. Иерархия каталогов «main», которая содержит все файлы «main» сборки, и иерархии каталогов «flavours», каждый каталог flavour содержит файлы, которые будут перезаписывать или дополнять эти «main» во время сборки.

Для моего использования (я не могу перейти на Android Studio) я написал простой ant-скрипт для имитации этой функции. Это работает на Netbeans и Eclipse, и я думаю, что это своего рода независимый от проекта.

Для его использования полная папка проекта должна отступить на один уровень иерархии, а исходная должна быть размещена в каталоге «main». Необходимо создать каталог сборки и поместить несколько папок «вкусов» внутри «вкусов», поскольку это:

 ├── build.xml                           < - ant script file
├── main                                < - original project
├── flavors
│     ├── freeVersion                   < - files related with a freeVersion app
│     └── paidVersion                   < - files related with a paidVersion app
└── build                               < - temporary build folder
  

Запустив скрипт ($ ant change-flavor), он запросит каталог witch flavor, который вы хотите создать. После ввода пользователем он проверяет наличие каталогов flavor и копирует весь основной каталог в папку build, плюс возможные файлы «flavors», перезаписывая «основные».

Результирующая папка сборки представляет собой совершенно новый собственный проект Android / Cordova / любой другой, который обычно может быть скомпилирован через IDE.

 <?xml version="1.0" encoding="UTF-8"?>

<project name="Flavors" basedir="." >

<property name="flavors.dir" value="flavors"/>
<property name="flavors.build.dir" value="build"/>
<property name="flavors.main.dir" value="main"/>

<target name="change-flavor">
    <input message="Witch Flavor?" addproperty="flavor.dir" />

     <fail message="Empty flavor not allowed">
         <condition>
                 <equals arg1="${flavor.dir}" arg2=""/>
         </condition>
    </fail>     

    <fail message="Directory ${flavors.dir}/${flavor.dir} not exists">
        <condition>
            <not>
                <available file="${flavors.dir}/${flavor.dir}" type="dir" />
            </not>
        </condition>
    </fail>

    <echo message="Deleting build dir ${flavors.build.dir}"/>
    <delete includeemptydirs="true">
        <fileset dir="${flavors.build.dir}" includes="**/*"/>
    </delete>

    <echo message="Copying from main ${flavors.build.dir}"/>
    <copy todir="${flavors.build.dir}" includeemptydirs="true" >  
            <fileset dir="${flavors.main.dir}" includes="**"/>  
     </copy>        

    <echo message="Copying from flavor ${flavors.build.dir}"/>
    <copy todir="${flavors.build.dir}" includeemptydirs="true" overwrite="true" >
            <!-- exclude folder is here because my flavors directories are also netbeans
                 projects. If similar approach is used on eclipse, maybe put here .project 
                 and .settings folders -->
            <fileset dir="${flavors.dir}/${flavor.dir}" includes="**" excludes="nbproject/**"/>
     </copy>        

    </target>    
</project>
  

За каждую сборку версии предусмотрено штрафное время, потому что нет предварительно скомпилированного материала, но в моем случае, я думаю, это того стоит, поскольку единственное, что меняется от версии к другой, — это файлы свойств и ресурсы. Большая часть процесса разработки может быть выполнена в «основном» проекте, варианты — это просто оболочки. Кроме того, это позволяет избежать внедрения в собственную систему сборки cordova / интеграцию netbeans.