Android ANTワンタッチで混同されたJARを生成


一、インストールと配置Ant
システム環境変数の追加:ANT_HOME、この変数はAnt解凍後のルートディレクトリを指し、システム環境変数pathにAntのbinディレクトリ(%ANT_HOME%bin)を追加します.
二、Androidプロジェクトの更新
cmdコマンドの実行:android update project-t sdkバージョン番号-pプロジェクトルートディレクトリ
このコマンドはまずシステムpathを構成する必要があり、構成しなくてもよい、直接バッチファイル:Android Sdkインストールディレクトリtoolsandroidを呼び出す.bat
sdkバージョン番号は、このコマンドでリストできます:android list targets
実行後、プロジェクトのルートディレクトリでbuildが生産されます.xmlおよびlocal.properties
三、構成ファイルの修正
個人の好みで作成すればよいが、以下は参考までにする.
local.properties
sdk.dir=D:\\Program Files\\adt-bundle-windows\\sdk
diyJavaFilePath=bld/java
diyClassFilePath=bld/class
diyClsJarFile=bld/src.jar
diyOptJarFile=bld/blur.jar
diyDexFileFolder=bld
diyReleaseFilePath=bld/release.jar

build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="antMain" default="dex_jar">

    <property file="local.properties" />
    <property file="ant.properties" />
    <property environment="env" />
    <loadproperties srcFile="project.properties" />
    <import file="custom_rules.xml" optional="true" />
    <import file="${sdk.dir}/tools/ant/build.xml" />

    <!--   Android   -->
    <property name="lib.android" value="${sdk.dir}\platforms\${target}\android.jar"/>
    <!--        -->
    <property name="lib.proguard" value="${sdk.dir}\tools\proguard\lib\proguard.jar"/>
    <!--   lib   -->
    <property name="lib.selflib" value="E:\java\workspace\base\bin\base.jar"/>
    <!--     (     windows,     linux,  .bat           ) -->  
    <property name="dx" value="${sdk.dir}\build-tools\android-4.4.2\dx.bat" />
    
    <!--      jar -->
    <path id="dependencies">  
        <fileset dir="E:\java\workspace\">
            <include name="base/bin/*.jar" />
        </fileset>  
    </path> 
    
    <!--   java  (      ) -->
    <target name="separate_java">
        <!-- diyJavaFilePath   java          -->
        <delete dir="${diyJavaFilePath}" />
        <mkdir dir="${diyJavaFilePath}" />    
		<copy todir="${diyJavaFilePath}">
			<fileset dir="${basedir}/src"> 
				<include name="com/**/*.java" /> 
			</fileset> 
			<fileset dir="${basedir}/gen"> 
				<include name="com/**/*.java" /> 
			</fileset> 
		</copy>
    </target>
    
    <!--   java  (  class  ) -->
    <target name="compile_java" depends="separate_java">
        <!-- diyClassFilePath   class          -->
        <delete dir="${diyClassFilePath}" />
        <mkdir dir="${diyClassFilePath}" />
        
        <javac encoding="UTF-8" target="1.6" debug="false" extdirs=""  
                srcdir="${diyJavaFilePath}"  
                destdir="${diyClassFilePath}"  
                includeAntRuntime = "false"
                bootclasspath="${lib.android}"> 
        	<classpath refid="dependencies" />
        </javac>
    </target>  
    
    <!--   class   -->
    <target name="optimize_class" depends="compile_java">  
        <!-- diyClsJarFile     JAR    -->
        <delete file="${diyClsJarFile}"/>  

        <jar destfile="${diyClsJarFile}">
        	<fileset dir="${diyClassFilePath}" includes="**/*.class"/>
        </jar>
        
        <!-- diyOptJarFile     JAR    -->
        <delete file="${diyOptJarFile}"/>
        
        <java jar="${lib.proguard}" fork="true" failonerror="true">  
            <jvmarg value="-Dmaximum.inlined.code.length=32"/>  
            <arg value="-injars ${diyClsJarFile}"/>  
            <arg value="-outjars ${diyOptJarFile}"/>  

            <arg value="-libraryjars ${lib.android}"/>  
            
            <arg value="-dontpreverify"/>  
            <arg value="-dontoptimize"/>  
            <arg value="-dontusemixedcaseclassnames"/>  
            <arg value="-allowaccessmodification"/>  
            <arg value="-optimizationpasses 7"/>  
            <arg value="-verbose"/>  
            <arg value="-dontskipnonpubliclibraryclasses"/>  
            <arg value="-dontskipnonpubliclibraryclassmembers"/>
            
            <!--           -->
            <arg value="-keepattributes Exceptions,*Annotation*,EnclosingMethod"/>
            <arg value="-keep public class com.**.*{public <fields>;<methods>;}"/>
            
        </java>  
        
    </target>
    
    <!-- DEX-JAR   -->
    <target name="dex_jar" depends="optimize_class">
        <!--    dex     -->
        <delete file="${diyDexFileFolder}/classes.dex"/>
        
        <exec executable="${dx}" failonerror="true">  
            <arg value="--dex" />  
            <arg value="--output=${diyDexFileFolder}/classes.dex" />  
            <arg value="${diyOptJarFile}" />  
            <arg value="${basedir}/libs" />
        </exec >
        
        <!--     dex    Jar        -->
        <delete file="${diyReleaseFilePath}"/>
        
		<jar destfile="${diyReleaseFilePath}">
            <fileset dir="${basedir}/${diyDexFileFolder}">  
		        <include name="**/*.dex" />
		    </fileset>
        </jar>
	</target>
	
    <!--     (    ):java -jar jarName args -->
    <target name="cmd_jar" depends="dex_jar">
        <java jar="${jarUtilName}" fork="true" failonerror="true">  
		   <jvmarg value="-Dmaximum.inlined.code.length=32"/>  
		   <arg value="${arg1}"/>  
           <arg value="${arg2}"/>  
           <arg value="${arg3}"/> 
           <!-- arg4... -->
		</java>
    </target>
    
    <!--     (    ) -->
    <target name="release" depends="dex_jar">
        <delete file="${file_release}"/>
        <!-- 
        	    ${diyFileA}  ${diyFileBPath}/${diyFileBName}    
        	      :
        	${diyFileA}
        	assets/${diyFileBName}
        -->
        <jar destfile="${file_release}">
            <zipfileset src="${diyFileA}"/>
            <zipfileset dir="${basedir}/${diyFileBPath}" prefix="assets">
			    <include name="${diyFileBName}"/>
			</zipfileset>
        </jar>
    </target>
</project>

プロジェクトのルートディレクトリでantコマンドを実行すると、混同されたjarパッケージ(プロジェクトのルートディレクトリのbldフォルダの下)を生成できます.
本手法はLIBとしてのJARパッケージの開発に適しており,DEXファイルの生産,APKファイルの生成,APKへの署名などの操作が必要であればさらに多くの作業が必要である.