首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ant生成带有Prebop的android apk

如何使用Ant生成带有Prebop的android apk
EN

Stack Overflow用户
提问于 2012-02-09 05:57:12
回答 2查看 811关注 0票数 3

我正在做一个Android项目,它需要来自同一代码库的多个版本(例如Lite/Pro),但Java不允许预处理指令。在谷歌上搜索一下,只能找到这篇关于Prebop预处理器的this教程。问题是,该教程不是针对Android的,我不知道如何在编译给定特定版本后生成apk。这是蚂蚁代码:

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

发布于 2012-09-07 16:29:36

您应该(至少)将"splitsource“依赖项添加到"compile”目标中,而不是"copysource“中,这样类文件就会生成经过预处理的java文件。

票数 2
EN

Stack Overflow用户

发布于 2012-02-09 06:20:35

为了在命令行中构建android,您应该遵循以下步骤;

首先创建一个android项目;

代码语言:javascript
复制
PATH_TO_SDK/android create project -n NAME -p PATH -k PACKAGE -a ACTIVITY -t TARGET_ID

名称:您的项目名称

PATH:您的项目路径

PACKAGE:您的工程包(如com.example )

活动:您的主要活动

TARGET_ID:你的目标SDK的id

然后你可以使用ant构建,如下所示;

代码语言:javascript
复制
ant release

代码语言:javascript
复制
ant PATH/build.xml release

(注意:您可以在build.xml中进行您想要的安排)

如果您的项目没有错误,则您的项目应该成功生成。

现在,您可以在bin/目录中看到debug apk文件。

如果你做了发布构建,你应该使用jarsigner来签署你的项目,如下所示;

代码语言:javascript
复制
jarsigner -verbose -storepass PASS -keypass KEY_PASS -keystore KEY_STORE_PATH PROJECT_PATH/bin/PROJECT_NAME-release-unsigned.apk YOUR_KEY_STORE_FILE

然后验证你的.apk文件;

代码语言:javascript
复制
jarsigner -verbose -verify PROJECT_PATH/bin/PROJECT_NAME-release-unsigned.apk

最后,你可以制作最终发布的apk文件;

代码语言:javascript
复制
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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9202132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档