2014-05-12 2 views
0

Android 프로젝트의 build.xml 파일에이 문제가 있습니다.목표 무시가 예상대로 작동하지 않습니다.

기본적으로 안드로이드 SDK build.xml 파일의 "-compile"타겟을 내 build.xml 파일에 복사했습니다. 그러나 개미를 실행하면 내 SDK 대신 Android SDK build.xml 파일에서 "-compile"타겟을 계속 사용합니다. 어디서나 내가 읽은 build.xml 파일에 대한 주석을 포함하여이 방법은 대상 재정의가 작동하는 방법이지만 어떤 이유로 내 재정의 대상이 실행되고 있지 않습니다.

내가해야 할 다른 것이 있습니까?

감사합니다.

UPDATE는 :

나는 -compile 대상에 <fileset dir="${source.absolute.dir}" excludes="**/*.java ${android.package.excludes}" /> 줄을 주석으로 처리하기 위해 특별히이 일을하고 있습니다.

아래에서 볼 수있는 것처럼 두 가지 다른 echo 문이 있습니다. 나는 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> 
+0

수정 된 build.xml 파일의 관련 부분을 게시하십시오. –

답변

0

기본에서 빌드 타겟을 무시하려면 다음은

여기

<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/도구/build.xml 파일에서 동일한 대상 내 custom_rules.xml 파일의 대상 build.xml 인 경우 사용자 지정 대상을 custom_rules.xml이라는 파일에 저장해야합니다.

+0

답변 해 주셔서 감사합니다. 따라서 build.xml 파일에서 주석은 다음과 같이 표시됩니다. –

+0

응답 해 주셔서 감사합니다. 따라서 build.xml 파일 내에서 주석은 다음을 설명합니다. 왜이 기능이 작동하지 않습니까? ! -/복사본이 파일에 대상을 붙여, * 전 * : - 하나의 대상을 사용자 정의' 가 : - 는'< '기존 목표를 정의하려면, 두 가지 옵션이 실제 빌드 file.' 가져 오기 작업입니다. - 필요에 맞게 사용자 정의하십시오. ' –

+0

안녕하세요 @ Code-Guru, 그래서 필자는 target을 custom_rules.xml로 이동 시키려고 시도했지만 여전히 대상을 무시하지는 않습니다. 대상 "-compile"은 항상 내 custom_rules.xml 파일 대신 sdk/tools/build.xml 파일에서 실행됩니다. S문을 sdk/tools/build.xml 파일에 삽입하면 실행 파일이 명확하게 표시됩니다. –