Как создать Android APK с помощью Prebop с помощью Ant - PullRequest
3 голосов
/ 09 февраля 2012

Я работаю над проектом Android, которому требуется несколько версий из одной и той же кодовой базы (например, Lite / Pro), но Java не позволяет использовать директивы предварительной обработки. Поиск в Google только выбрасывает этот этот учебник о препроцессоре Prebop. Проблема в том, что учебник не для Android, и я не знаю, как сгенерировать apk после компиляции для конкретной версии. Это код муравья:

<?xml version="1.0"?>
<project name="Hello" default="compile" basedir=".">
    <property file="local.properties" />
    <property file="ant.properties" />
    <loadproperties srcFile="project.properties" />
    <property name="android-home" value="../android-sdks" />
    <property name="android-version" value="3" />
    <property name="android-platform-specific" value="${android-home}/platforms/android-${android-version}" />
    <property name="android-jar" value="${android-platform-specific}/android.jar" />
    <property name="android-tools" value="${android-home}/platform-tools" />
    <property name="resource-folder" value="res" />
    <property name="gen-folder" value="gen" />

    <property name="src" location="src" />

    <property name="tmpfolder" value="/tmp/Hello" />
    <property name="src_lite" value="${tmpfolder}/src_lite"/>
    <property name="src_pro" value="${tmpfolder}/src_pro"/>   

    <property name="build" location="bin" />
    <property name="build_lite" value="${build}/lite"/>
    <property name="build_pro" value="${build}/pro"/>   

    <property name="out-folder" value="${build_lite}" />
    <property name="dex-file" value="classes.dex" />
    <property name="intermediate-dex" value="${out-folder}/${dex-file}" />
    <property name="external-libs-folder" value="bin/lite" />
    <property name="out-classes" value="${out-folder}/classes" />
    <property name="out-classes-location" value="./${out-classes}"/>

    <target name="clean">
        <delete dir="${tmpfolder}" />
        <delete dir="${build}" />
    </target>

    <target name="makedir">
        <mkdir dir="${src_lite}" />
        <mkdir dir="${src_pro}" />
        <mkdir dir="${build_lite}" />
        <mkdir dir="${build_pro}" />
    </target>

    <target name="resource-src" depends="makedir">
        <echo>Generating R.java / Manifest.java from the resources...</echo>
        <exec executable="${android-tools}/aapt.exe" failonerror="true">
            <arg value="package" />
            <arg value="-m" />
            <arg value="-J" />
            <arg path="${gen-folder}" />
            <arg value="-M" />
            <arg path="AndroidManifest.xml" />
            <arg value="-S" />
            <arg path="${resource-folder}" />
            <arg value="-I" />
            <arg path="${android-jar}" />
            <arg value="--custom-package" />
            <arg value="com.pack.name" />
        </exec>
    </target>

    <target name="copysource">
        <copy todir="${src_lite}"><fileset dir="src" /></copy>
        <copy todir="${src_pro}"><fileset dir="src" /></copy>
    </target>

    <target name="splitsource"  description="preprocessor">
        <preprocess indir="${src}" outdir="${src_lite}" out="replace">
            <var name="pro" value="false"/>
            <filetype commentend="*/" commentbegin="/*" extensions="java"/>
        </preprocess>
        <preprocess indir="${src}" outdir="${src_pro}" out="replace">
            <var name="pro" value="true"/>
            <filetype commentend="*/" commentbegin="/*" extensions="java"/>
        </preprocess>
    </target>

    <target name="compile" depends="makedir, copysource">
        <javac srcdir="${src_lite}" destdir="${build_lite}" includeantruntime="false">
            <classpath>
                <path id="application" location="${android-jar}"/>
                <path id="application" location="src" />
                <path id="application" location="res" />
            </classpath>
        </javac>
        <javac srcdir="${src_pro}" destdir="${build_pro}" includeantruntime="false">
            <classpath>
                <path id="application" location="${android-jar}"/>
                <path id="application" location="src" />
                <path id="application" location="res" />
            </classpath>
        </javac>
    </target>
    <import file="${sdk.dir}/tools/ant/build.xml" />
</project>

Я надеюсь, что кто-то может дать мне указания, потому что довольно разочаровывает разработка с несколькими API на Android.

Ответы [ 2 ]

2 голосов
/ 07 сентября 2012

Вы должны (по крайней мере) добавить зависимость "splitsource" к цели "compile" вместо "copysource", чтобы файлы классов генерировались с предварительно обработанными файлами Java.

0 голосов
/ 09 февраля 2012

Чтобы собрать Android в командной строке, вам необходимо выполнить следующие шаги:

Сначала создать проект Android;

PATH_TO_SDK/android create project -n NAME -p PATH -k PACKAGE -a ACTIVITY -t TARGET_ID

NAME: имя вашего проекта
PATH:путь к вашему проекту
ПАКЕТ: ваш пакет проекта (например, com.example)
ACTIVITY: ваша основная деятельность
TARGET_ID: идентификатор вашего целевого SDK

Затем вы можете собрать с помощью ant, как показано ниже;

ant release

или

ant PATH/build.xml release

(ПРИМЕЧАНИЕ: вы можете договориться в build.xml по своему усмотрению)

Ваш проект должен быть успешно собран, если ваш проект неУ меня нет ошибки.

Теперь вы можете увидеть файлы apk отладки в каталоге bin /.

Если вы делаете релизную сборку, вы должны использовать jarsigner, чтобы подписать ваш проект, как показано ниже:

jarsigner -verbose -storepass PASS -keypass KEY_PASS -keystore KEY_STORE_PATH PROJECT_PATH/bin/PROJECT_NAME-release-unsigned.apk YOUR_KEY_STORE_FILE

Затем проверьте ваш файл .apk;

jarsigner -verbose -verify PROJECT_PATH/bin/PROJECT_NAME-release-unsigned.apk

Наконец,вы можете сделать окончательный релиз apk-файла;

ANDROID_SDK_PATH/zipalign 4 PROJECT_PATH/bin/PROJECT_NAME-release-unsigned.apk PROJECT_PATH/bin/PROJECT_NAME-release.apk

Ваш apk готов к выпуску здесь;

PROJECT_PATH / bin / PROJECT_NAME-release.apk

...