目标覆盖未按预期工作



我在Android项目的build.xml文件中遇到这个问题。

我基本上从android sdk build.xml文件中复制了"-compile"目标到我自己的build.xml文件中。然而,当运行ant时,它一直使用Android sdk build.xml文件中的"-compile"目标,而不是我的。我读到的所有地方,包括我的build.xml文件的注释,都说这就是目标重写的工作方式,但是由于某种原因,我的覆盖目标没有运行。

还有什么我需要做的吗?

感谢你的帮助!

:

我这样做是专门为了注释掉-compile目标中的<fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" />行。

如下所示,有两个不同的echo语句。我一直看到sdk/tools/build.xml中打印的那个。另一个明确的指示是构建失败,因为它没有使用我的目标。

下面是我的custom_rules.xml文件

中的目标
<target name="-compile" depends="-pre-build, -build-setup, -code-gen, -pre-compile">
    <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
        <!-- merge the project's own classpath and the tested project's classpath -->
        <path id="project.javac.classpath">
            <path refid="project.all.jars.path" />
            <path refid="tested.project.classpath" />
            <path path="${java.compiler.classpath}" />
        </path>
        <javac encoding="${java.encoding}"
                source="${java.source}" target="${java.target}"
                debug="true" extdirs="" includeantruntime="false"
                destdir="${out.classes.absolute.dir}"
                bootclasspathref="project.target.class.path"
                verbose="${verbose}"
                classpathref="project.javac.classpath"
                fork="${need.javac.fork}">
            <src path="${source.absolute.dir}" />
            <src path="${gen.absolute.dir}" />
            <compilerarg line="${java.compilerargs}" />
             <classpath>
                 <fileset dir="." includes="libs_ext/*.jar"/>
            </classpath>
        </javac>
        <!-- if the project is instrumented, intrument the classes -->
        <if condition="${build.is.instrumented}">
            <then>
                <echo level="info">Instrumenting classes from ${out.absolute.dir}/classes...</echo>
                <!-- build the filter to remove R, Manifest, BuildConfig -->
                <getemmafilter
                        appPackage="${project.app.package}"
                        libraryPackagesRefId="project.library.packages"
                        filterOut="emma.default.filter"/>
                <!-- define where the .em file is going. This may have been
                     setup already if this is a library -->
                <property name="emma.coverage.absolute.file" location="${out.absolute.dir}/coverage.em" />
                <!-- It only instruments class files, not any external libs -->
                <emma enabled="true">
                    <instr verbosity="${verbosity}"
                           mode="overwrite"
                           instrpath="${out.absolute.dir}/classes"
                           outdir="${out.absolute.dir}/classes"
                           metadatafile="${emma.coverage.absolute.file}">
                        <filter excludes="${emma.default.filter}" />
                        <filter value="${emma.filter}" />
                    </instr>
                </emma>
            </then>
        </if>
        <!-- if the project is a library then we generate a jar file -->
        <if condition="${project.is.library}">
            <then>
                <echo level="info">Creating library output jar file... CUSTOM_RULESXML</echo>
                <property name="out.library.jar.file" location="${out.absolute.dir}/classes.jar" />
                <if>
                    <condition>
                        <length string="${android.package.excludes}" trim="true" when="greater" length="0" />
                    </condition>
                    <then>
                        <echo level="info">Custom jar packaging exclusion: ${android.package.excludes}</echo>
                    </then>
                </if>
                <propertybyreplace name="project.app.package.path" input="${project.app.package}" replace="." with="/" />
                <jar destfile="${out.library.jar.file}">
                    <fileset dir="${out.classes.absolute.dir}"
                            includes="**/*.class"
                            excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/BuildConfig.class"/>
                    <!--<fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" />-->
                </jar>
            </then>
        </if>
    </do-only-if-manifest-hasCode>
</target>

下面是sdk/tools/build.xml文件中相同的目标:

<target name="-compile" depends="-pre-build, -build-setup, -code-gen, -pre-compile">
    <do-only-if-manifest-hasCode elseText="hasCode = false. Skipping...">
        <!-- merge the project's own classpath and the tested project's classpath -->
        <path id="project.javac.classpath">
            <path refid="project.all.jars.path" />
            <path refid="tested.project.classpath" />
            <path path="${java.compiler.classpath}" />
        </path>
        <javac encoding="${java.encoding}"
                source="${java.source}" target="${java.target}"
                debug="true" extdirs="" includeantruntime="false"
                destdir="${out.classes.absolute.dir}"
                bootclasspathref="project.target.class.path"
                verbose="${verbose}"
                classpathref="project.javac.classpath"
                fork="${need.javac.fork}">
            <src path="${source.absolute.dir}" />
            <src path="${gen.absolute.dir}" />
            <compilerarg line="${java.compilerargs}" />
        </javac>
        <!-- if the project is instrumented, intrument the classes -->
        <if condition="${build.is.instrumented}">
            <then>
                <echo level="info">Instrumenting classes from ${out.absolute.dir}/classes...</echo>
                <!-- build the filter to remove R, Manifest, BuildConfig -->
                <getemmafilter
                        appPackage="${project.app.package}"
                        libraryPackagesRefId="project.library.packages"
                        filterOut="emma.default.filter"/>
                <!-- define where the .em file is going. This may have been
                     setup already if this is a library -->
                <property name="emma.coverage.absolute.file" location="${out.absolute.dir}/coverage.em" />
                <!-- It only instruments class files, not any external libs -->
                <emma enabled="true">
                    <instr verbosity="${verbosity}"
                           mode="overwrite"
                           instrpath="${out.absolute.dir}/classes"
                           outdir="${out.absolute.dir}/classes"
                           metadatafile="${emma.coverage.absolute.file}">
                        <filter excludes="${emma.default.filter}" />
                        <filter value="${emma.filter}" />
                    </instr>
                </emma>
            </then>
        </if>
        <!-- if the project is a library then we generate a jar file -->
        <if condition="${project.is.library}">
            <then>
                <echo level="info">Creating library output jar file... SDK TOOLS BUILDXML</echo>
                <property name="out.library.jar.file" location="${out.absolute.dir}/classes.jar" />
                <if>
                    <condition>
                        <length string="${android.package.excludes}" trim="true" when="greater" length="0" />
                    </condition>
                    <then>
                        <echo level="info">Custom jar packaging exclusion: ${android.package.excludes}</echo>
                    </then>
                </if>
                <propertybyreplace name="project.app.package.path" input="${project.app.package}" replace="." with="/" />
                <jar destfile="${out.library.jar.file}">
                    <fileset dir="${out.classes.absolute.dir}"
                            includes="**/*.class"
                            excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/BuildConfig.class"/>
                          <fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" />
                </jar>
            </then>
        </if>
    </do-only-if-manifest-hasCode>
</target>

要从默认的build.xml覆盖构建目标,您应该将您的自定义目标放在名为custom_rules.xml的文件中。

相关内容

  • 没有找到相关文章

最新更新