1

我有一个脚本可以将 src、res、libs 等(基于设备类型)从 Android 项目文件夹过滤到另一个特定文件夹。例如类型 1 和类型 2 设备在运行脚本后将具有以下结构。

Device_Type_1
  \src
  \res
  \libs
  \assets
  \AndroidManifest.xml

Device_Type_2
  \src
  \res
  \libs
  \assets
  \AndroidManifest.xml

我必须编写一个脚本来使用上述文件夹名称进行构建。我尝试了ant release命令,但它抛出了 Java 编译错误。

我想知道是否有任何命令/脚本可以将 src、res、lib、资产和清单文件的路径作为参数传递并可以构建项目。

4

1 回答 1

1

不确定我是否理解正确,但这是我用来为平板电脑和手机构建不同 apk 的脚本:

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

<property file="local.properties" />

<property environment="env" />

<property name="temp.dir" location="bin/temp" />

<property name="resource.absolute.dir" location="${temp.dir}/res" />

<property name="resource.source.dir" location="res" />

<condition property="sdk.dir" value="${env.ANDROID_HOME}">
    <isset property="env.ANDROID_HOME" />
</condition>

<loadproperties srcFile="project.properties" />

<fail message="sdk.dir is missing. Make sure to generate local.properties using &apos;android update project&apos; or to inject it through the ANDROID_HOME environment variable." unless="sdk.dir" />

<import file="${sdk.dir}/tools/ant/build.xml" />

<macrodef name="prepare-temp-dir">
    <attribute name="target" default="phone" />
    <sequential>
        <delete dir="${temp.dir}" />
        <mkdir dir="${temp.dir}" />
        <mkdir dir="${resource.absolute.dir}" />
        <!-- Probably should rewrite this with ant-contrib -->
        <if>
            <condition>
                <and>
                    <equals arg1="@{target}" arg2="phone" />
                </and>
            </condition>
            <then>
                <copy todir="${resource.absolute.dir}">
                    <fileset dir="${resource.source.dir}" casesensitive="no">
                        <exclude name="/*sw600dp*/**" />
                        <exclude name="/*large*/*" />
                        <exclude name="/*xlarge*/*" />
                    </fileset>
                </copy>
            </then>

            <else>
                <if>
                    <condition>
                        <and>
                            <equals arg1="@{target}" arg2="tablet" />
                        </and>
                    </condition>
                    <then>
                        <copy todir="${resource.absolute.dir}">
                            <fileset dir="${resource.source.dir}" casesensitive="no">
                                <exclude name="/*small*/**" />
                                <exclude name="/*normal*/*" />
                            </fileset>
                        </copy>
                    </then>
                </if>
            </else>
        </if>
    </sequential>
</macrodef>

<macrodef name="clean-temp-dir">
    <sequential>
        <delete dir="${temp.dir}" />
    </sequential>
</macrodef>

<target name="release-phone">
    <echo message="Starting build procedure for target 'phone'" />
    <prepare-temp-dir target="phone" />
    <clean-temp-dir />
</target>

<target name="release-tablet">
    <echo message="Starting build procedure for target 'tablet'" />
    <prepare-temp-dir target="tablet" />
    <clean-temp-dir />
</target>

它只是扩展了标准的 android build.xml 并稍微修改了它。构建开始时,我创建一个临时目录并复制目标所需的所有资源,然后从该临时目录构建。

现在它只是分隔可绘制文件夹,但您可以轻松调整它以实现您的目标

于 2013-01-23T11:57:17.893 回答