Я хотел бы создать две версии моего приложения Android
, используя файл Apache ant
. Проблема в том, что обе версии идентичны, кроме рекламы в облегченной версии. Я прочитал об использовании Configurations
с ant до build
отладочных версий.Android Ant Build
Следующий класс определяет некоторые константы, на которые можно ссылаться в приложении.
public class Config {
// Whether or not to include logging in the app.
public final static boolean LOGGING = true;
}
И вот пример того, как использовать эти константы, чтобы определить, включено ли ведение журнала или нет.
if (Config.LOGGING) {
Log.d(TAG, "[onCreate] Success");
}
Теперь я могу включить или отключить ведение журнала в моем файле свойств.
# Turn on or off logging.
config.logging=true
Это не работает, потому что перед использованием этой конфигурации я должен создать второй конфигурационный файл и использовать filterset
и копию.
public class Config {
// Whether or not to include logging in the app.
public final static boolean LOGGING = @[email protected];
}
Это довольно просто, но, как я мог бы использовать это, чтобы построить две версии моего приложения и без рекламы. И как я могу изменить имена пакетов с помощью ant, поэтому android market
будет принимать оба пакета (Full и Lite).
Спасибо за ваши предложения, но у меня все еще есть проблемы.
Мне удалось написать некоторые основные цели, которые очищают мои сборки и копируют все файлы, необходимые для создания приложения в двух папках/full и/lite. Поэтому у меня есть два каталога с одним и тем же контентом. Теперь я переименовываю все совпадения имени пакета приложений во все * .java-файлы и файл AndroidManifest (целевая подготовка).
Чтобы действительно построить две разные версии, теперь мне нужно будет включить код из моего первого сообщения. Но как мне это сделать и как я могу создать обе версии в целевом релизе и записать полученные файлы * .apk в сборку buildoy?
И наконец ... Это все, что мне нужно сделать, чтобы построить запущенные * .apks, которые будут приняты рынком Android?
<?xml version="1.0" encoding="UTF-8"?>
<project name="my.application" default="help" basedir=".">
<!-- Load the custom property files -->
<property file="build.properties" />
<property file="passwords.properties" />
<!-- Set global properties for this build -->
<property name="my.application.pkg" value="my.application"/>
<property name="my.application.pkg.full" value="my.application.full"/>
<property name="my.application.pkg.lite" value="my.application.lite"/>
<property name="my.application" location="."/>
<property name="my.application.build" location="build"/>
<property name="my.application.src" location="src"/>
<property name="my.application.res" location="res"/>
<property name="my.application.gen" location="gen"/>
<property name="my.application.full" location="full"/>
<property name="my.application.full.src" location="full/src"/>
<property name="my.application.full.res" location="full/res"/>
<property name="my.application.full.gen" location="full/gen"/>
<property name="my.application.full.build" location="full/build"/>
<property name="my.application.lite" location="lite"/>
<property name="my.application.lite.build" location="lite/build"/>
<property name="my.application.lite.src" location="lite/src"/>
<property name="my.application.lite.res" location="lite/res"/>
<property name="my.application.lite.gen" location="lite/gen"/>
<!-- Create and update the local.properties file -->
<loadproperties srcFile="local.properties" />
<!-- Load the ant.properties file -->
<property file="ant.properties" />
<!-- Load the project.properties file -->
<loadproperties srcFile="project.properties" />
<!-- Quick check on sdk.dir. -->
<fail
message="sdk.dir is missing."
unless="sdk.dir" />
<!-- Version-tag: 1 -->
<import file="${sdk.dir}/tools/ant/build.xml" />
<target name="release" depends="report, prepare">
<echo>Building the target!</echo>
</target>
<target name="prepare" depends="cleanup" >
<!-- Copy the Manifest.xml to the full copy -->
<copyfile src="${my.application}/AndroidManifest.xml"
dest="${my.application.full}/AndroidManifest.xml" />
<!-- Copy the source files to the full copy -->
<copy todir="${my.application.full.src}" overwrite="true">
<fileset dir="${my.application.src}" />
</copy>
<!-- Copy the resources to the full copy -->
<copy todir="${my.application.full.res}" overwrite="true">
<fileset dir="${my.application.res}" />
</copy>
<!-- Copy the generated to the full copy -->
<copy todir="${my.application.full.gen}" overwrite="true">
<fileset dir="${my.application.gen}" />
</copy>
<!-- Replace the package name in the full manifest file -->
<replaceregexp file="${my.application.full}/AndroidManifest.xml"
match='package="(.*)"'
replace='package="${my.application.pkg.full}"'
byline="false" />
<!-- Change the package name in all Java files -->
<replaceregexp flags="g" byline="false">
<regexp pattern="${my.application.pkg}" />
<substitution expression="${my.application.pkg.full}" />
<fileset dir="${my.application.full.src}" includes="**/*.java" />
</replaceregexp>
<!-- Copy the Manifest.xml to the lite copy -->
<copyfile src="${my.application}/AndroidManifest.xml"
dest="${my.application.lite}/AndroidManifest.xml" />
<!-- Copy the source files to the lite copy -->
<copy todir="${my.application.lite.src}" overwrite="true">
<fileset dir="${my.application.src}" />
</copy>
<!-- Copy the resources to the lite copy -->
<copy todir="${my.application.lite.res}" overwrite="true">
<fileset dir="${my.application.res}" />
</copy>
<!-- Copy the generated to the lite copy -->
<copy todir="${my.application.lite.gen}" overwrite="true">
<fileset dir="${my.application.gen}" />
</copy>
<!-- Replace the package name in the lite manifest file -->
<replaceregexp file="${my.application.lite}/AndroidManifest.xml"
match='package="(.*)"'
replace='package="${my.application.pkg.lite}"'
byline="false" />
<!-- Change the package name in all Java files -->
<replaceregexp flags="g" byline="false">
<regexp pattern="${my.application.pkg}" />
<substitution expression="${my.application.pkg.lite}" />
<fileset dir="${my.application.lite.src}" includes="**/*.java" />
</replaceregexp>
</target>
<!-- Deletes all directories, not needed anymore after compiling the source files -->
<target name="cleanup">
<!-- Delete the full version build dir -->
<delete dir="${my.application.full}"/>
<!-- Delete the lite version build dir -->
<delete dir="${my.application.lite}"/>
<!-- Delete the *.apk file -->
<delete file="my.application.full.apk"/>
<!-- Delete the *.apk file -->
<delete file="my.application.lite.apk"/>
</target>
</project>
Вы нашли решение? Я застрял в одной и той же проблеме. Не могли бы вы поделиться, если вы это исправите? – Mac
Не совсем. Я развернул программу без легкой версии. Но я был бы рад найти рабочее решение. – Phidelux