ANT构建为Android Proguard的混淆ANT、Android、Proguard

2023-09-05 06:54:22 作者:为你戎马今生

能否样品/简单模糊处理的ANT Android的任务的人分享?只要我有完整的APK,我只需要通过*类HRU Proguard的,然后prepare * .dex打造APK

解决方案

我找到了解决办法:

在获取 Proguard的 - 副本proguard.jar为已知的目录(比如MyProject的/ ProGuard的) prepare proguard.cfg -describing什么,以及如何优化/模糊处理。这个过程中的Proguard的的手动 详尽的描述 prepare以下ANT的build.xml(或不服像这样的) - 伟大的感谢名单给的这家伙

更新完整的build.xml

 < XML版本=1.0编码=UTF-8&GT?;
<。项目名称=MyProject的默认值=zipalignBASEDIR =>
    <属性名=目标值=机器人-8/>
    <! - 属性文件=default.properties/  - >
    <属性名=编码值=UTF-8/>

    <! - 迪尔斯 - >
    <属性名=sdk.dir位置=位置Android SDK中的/>
    <属性名=proguard.dir值=ProGuard的/>
    <属性名=src.dir的值=SRC/>
    <属性名=gen.dir值=根/>
    <属性名=res.dir值=资源/>
    <属性名=assets.dir值=资产/>
    <属性名=libs.dir值=库/>
    <属性名=out.classes.unoptimized.dir值=出/>
    <属性名=out.classes.optimized.dir值=出/优化/>

    <! - 文件 - >
    <属性名=manifest.file值=AndroidManifest.xml中/>
    <属性名=signed.apk值=$ {ant.project.name} -signed.apk/>
    <属性名=unsigned.apk值=$ {ant.project.name} -unsigned.apk/>
    <属性名=final.apk值=$ {ant.project.name} .apk文件/>
    <属性名=的android.jar值=$ {sdk.dir} /工具/平台/ $ {}目标/android.jar/>
    <属性名=未优化的价值=unoptimized.jar/>
    <属性名=优化值=optimized.jar/>
    <属性名=proguard.config值=$ {proguard.dir} /proguard.cfg/>

    &所述;! - 工具 - >
    <属性名=dx.jar值=$ {sdk.dir} /platform-tools/lib/dx.jar/>
    <属性名=AAPT值=$ {sdk.dir} /平台/ $ {}目标/tool​​s/aapt.exe/>
    <属性名=zipalign值=$ {sdk.dir} /tool​​s/zipalign.exe/>
    <属性名=jarsign值=jarsigner.exe位置是在这里/>
    <属性名=密钥库的价值=你的密钥存储在这里/>
    <属性名=keyalias值=你的密钥别名是在这里/>


    &其中;路径的id =android.antlibs>
        < pathelement PATH =$ {sdk.dir} /tool​​s/lib/anttasks.jar/>
        < pathelement PATH =$ {sdk.dir} /tool​​s/lib/sdklib.jar/>
        < pathelement PATH =$ {sdk.dir} /tool​​s/lib/android$p$pfs.jar/>
        < pathelement PATH =$ {sdk.dir} /tool​​s/lib/apkbuilder.jar/>
        < pathelement PATH =$ {sdk.dir} /tool​​s/lib/jarutils.jar/>
    < /路径>

    <的taskdef名=设置
        类名=com.android.ant.SetupTask
        classpathref =android.antlibs/>
    <设置进口=FALSE/>

    <! - 的taskdef名=aaptexec
            类名=com.android.ant.AaptExecLoopTask
            classpathref =android.antlibs/  - >

    <目标名称=干净的描述=删除其他目标产生的输出文件。>
        <回声>清洗...< /回声>
        <删除DIR =$ {out.classes.unoptimized.dir}详细=真/>
        <删除DIR =$ {out.classes.optimized.dir}详细=真/>
    < /目标和GT;

    <目标名称=显示目录>
        <回声>如果需要创建输出目录...< /回声>
        < MKDIR DIR =$ {out.classes.unoptimized.dir}/>
        < MKDIR DIR =$ {out.classes.optimized.dir}/>
    < /目标和GT;

    <! - 编译该项目的.java文件到.class文件。 - >
    <目标名称=编译取决于=显示目录
            说明=编译项目的.java文件到.class文件>
        <回声>编译源代码...< /回声>
        < javac的编码=$ {}编码目标=1.6调试=真正的extdirs =
                DESTDIR =$ {out.classes.unoptimized.dir}
                bootclasspathref =android.target.classpath
                includeantruntime =真正的>
            < SRC PATH =$ {src.dir的}/>
            < SRC PATH =$ {gen.dir}/>
            <类路径>
                <文件集DIR =$ {libs.dir}包括=*罐子。/>
            < /类路径>
        < / javac的>
    < /目标和GT;

    <目标名称=preobfuscate取决于=编译>
        <回声> preparing于模糊处理...< /回声>
    <罐子destfile =$ {未优化}
       BASEDIR =$ {out.classes.unoptimized.dir}
       包括=** / **
       不包括=优化/ **
       />
    < /目标和GT;

    <! - 混淆使用ProGuard  - >
    <目标名称=优化,除非=NOOPTIMIZE取决于=preobfuscate>
        <回声> Proguard的混淆...< /回声>
        < Java的罐子=$ {proguard.dir} /proguard.jar叉=真正的failonerror =真正的>
            < jvmarg值= -  Dmaximum.inlined code.length = 16/>
            < ARG值=@ $ {proguard.dir} /proguard.cfg/>
            < ARG值= -  injars $ {未优化}/>
            < ARG值= -  outjars $ {}优化/>
            < ARG值= -  libraryjars $ {}的android.jar/>
        < / Java的>
        <解压SRC =$ {}优化DEST =$ {out.classes.optimized.dir}/>
        <! - 删除优化罐(今解压缩到bin目录) - >
        <删除文件=$ {}优化/>
        <删除文件=$ {未优化}/>
    < /目标和GT;

    <目标名称=DEX描述=转换JVM字节codeS到的Dalvik字节codeS取决于=优化>
        <回声>转换字节codeS到Dalvik虚拟机字节codeS ...< /回声>
        < Java的罐子=$ {dx.jar}叉=真正的>
            < ARG行= - 地塞米松--verbose --output = $ {out.classes.optimized.dir} /classes.dex $ {out.classes.optimized.dir}/>
        < / Java的>
    < /目标和GT;

    <目标名称=AAPT取决于=DEX描述=编译资源>
        <回声>包装资源...< /回声>
        < EXEC可执行=$ {} AAPTLOGERROR =真正的osfamily =窗口>
            < ARG行=P
            -F
            -M $ {manifest.file}
            -I $ {}的android.jar
            -S $ {res.dir}
            -A $ {assets.dir}
            -F $ {out.classes.optimized.dir} / $ {unsigned.apk}
            -m -J $ {gen.dir}/>
        < / EXEC>
    < /目标和GT;

    <目标名称=符号取决于=AAPT描述=号的apk>
        <输入消息=请输入密钥存储密码(存储:$ {密钥库}):
                       方法addProperty =keystore.password/>
        <回声>签名的apk ...< /回声>
        < EXEC可执行=$ {jarsign}LOGERROR =真正的osfamily =窗口>
            < ARG行= - 详细
            -keystore $ {}密钥库
            -storepass $ {keystore.password}
            -signedjar $ {out.classes.optimized.dir} / $ {signed.apk}
            $ {out.classes.optimized.dir} / $ {unsigned.apk} $ {keyalias}/>
        < / EXEC>
    < /目标和GT;

    <目标名称=zipalign取决于=号描述=拉链对齐>
        <回声>对齐APK ...< /回声>
        < EXEC可执行=$ {zipalign}LOGERROR =真正的osfamily =窗口>
            < ARG行= - ˚F
            -v
            4
            $ {out.classes.optimized.dir} / $ {signed.apk}
            $ {final.apk}/>
        < / EXEC>
    < /目标和GT;

< /项目>
 

该Ant任务已被添加到Eclipse的建设者(性能/建筑商)的任务后,Java的建设者和Android程序包生成之前。

preSS建设全部(这是更好地在Eclipse菜单中关闭自动生成校验)

Proguard 常用规则 佛系编码 CSDN博客

Can anyone share with sample/simple obfuscation ANT task for Android? Provided that I do have complete APK and I need just pass *class hru Proguard and then prepare *.dex to build APK

解决方案

I have found solution:

Get Proguard - copy proguard.jar into known directory (say MyProject/proguard) Prepare proguard.cfg -describing what and how optimize/obfuscate. This process thoroughly described in Proguard's manual Prepare following ANT's build.xml (or smth like this one) - great thanx to this guy

UPDATE complete build.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project name="MyProject" default="zipalign" basedir=".">
    <property name="target" value="android-8"/>
    <!--property file="default.properties" /-->
    <property name="encoding" value="UTF-8"/>

    <!-- dirs -->
    <property name="sdk.dir" location="Location of Android SDK"/>
    <property name="proguard.dir" value="proguard" />
    <property name="src.dir" value="src"/>
    <property name="gen.dir" value="gen"/>
    <property name="res.dir" value="res"/>
    <property name="assets.dir" value="assets"/>
    <property name="libs.dir" value="libs"/>
    <property name="out.classes.unoptimized.dir" value="out"/>
    <property name="out.classes.optimized.dir" value="out/optimized"/>

    <!-- files -->
    <property name="manifest.file" value="AndroidManifest.xml"/>
    <property name="signed.apk" value="${ant.project.name}-signed.apk"/>
    <property name="unsigned.apk" value="${ant.project.name}-unsigned.apk"/>
    <property name="final.apk" value="${ant.project.name}.apk"/>
    <property name="android.jar" value="${sdk.dir}/tools/platforms/${target}/android.jar"/>
    <property name="unoptimized" value="unoptimized.jar" />
    <property name="optimized" value="optimized.jar" />
    <property name="proguard.config" value="${proguard.dir}/proguard.cfg"/>

    <!-- tools -->
    <property name="dx.jar" value="${sdk.dir}/platform-tools/lib/dx.jar"/>
    <property name="aapt" value="${sdk.dir}/platforms/${target}/tools/aapt.exe"/>
    <property name="zipalign" value="${sdk.dir}/tools/zipalign.exe"/>
    <property name="jarsign" value="jarsigner.exe location is here"/>
    <property name="keystore" value="Your key store is here"/>
    <property name="keyalias" value="Your key alias is here"/>


    <path id="android.antlibs">
        <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />
        <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />
        <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />
        <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />
        <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />
    </path>

    <taskdef name="setup"
        classname="com.android.ant.SetupTask"
        classpathref="android.antlibs" />
    <setup import="false"/>

    <!--taskdef name="aaptexec"
            classname="com.android.ant.AaptExecLoopTask"
            classpathref="android.antlibs" /-->

    <target name="clean" description="Removes output files created by other targets.">
        <echo>Cleaning...</echo>
        <delete dir="${out.classes.unoptimized.dir}" verbose="true" />
        <delete dir="${out.classes.optimized.dir}" verbose="true" />
    </target>

    <target name="dirs">
        <echo>Creating output directories if needed...</echo>
        <mkdir dir="${out.classes.unoptimized.dir}" />
        <mkdir dir="${out.classes.optimized.dir}" />
    </target>

    <!-- Compiles this project's .java files into .class files. -->
    <target name="compile" depends="dirs"
            description="Compiles project's .java files into .class files">
        <echo>Compiling sources...</echo>
        <javac encoding="${encoding}" target="1.6" debug="true" extdirs=""
                destdir="${out.classes.unoptimized.dir}"
                bootclasspathref="android.target.classpath"
                includeantruntime="true">
            <src path="${src.dir}" />
            <src path="${gen.dir}" />
            <classpath>
                <fileset dir="${libs.dir}" includes="*.jar" />
            </classpath>
        </javac>
    </target>

    <target name="preobfuscate" depends="compile">
        <echo>Preparing to obfuscation...</echo>
    <jar destfile="${unoptimized}"
       basedir="${out.classes.unoptimized.dir}"
       includes="**/**"
       excludes="optimized/**"
       />
    </target>

    <!--  Obfuscation with ProGuard   -->
    <target name="optimize" unless="nooptimize" depends="preobfuscate">
        <echo>Proguard obfuscation...</echo>
        <java jar="${proguard.dir}/proguard.jar" fork="true" failonerror="true">
            <jvmarg value="-Dmaximum.inlined.code.length=16" />
            <arg value="@${proguard.dir}/proguard.cfg" />
            <arg value="-injars ${unoptimized}" />
            <arg value="-outjars ${optimized}" />
            <arg value="-libraryjars ${android.jar}" />
        </java>
        <unzip src="${optimized}" dest="${out.classes.optimized.dir}" />
        <!-- Delete optimized jar (now unzipped into bin directory)  -->
        <delete file="${optimized}"/>
        <delete file="${unoptimized}"/>
    </target>

    <target name="dex" description="Converting JVM bytecodes into Dalvik bytecodes" depends="optimize">
        <echo>Converting bytecodes to Dalvik VM bytecodes...</echo>
        <java jar="${dx.jar}" fork="true">
            <arg line="--dex --verbose --output=${out.classes.optimized.dir}/classes.dex ${out.classes.optimized.dir}"/>
        </java>
    </target>

    <target name="aapt" depends="dex" description="compile resources">
        <echo>Packing resources...</echo>
        <exec executable="${aapt}" logerror="true" osfamily="windows">
            <arg line="p
            -f
            -M ${manifest.file}
            -I ${android.jar}
            -S ${res.dir}
            -A ${assets.dir}
            -F ${out.classes.optimized.dir}/${unsigned.apk}
            -m -J ${gen.dir}"/>
        </exec>
    </target>

    <target name="sign" depends="aapt" description="sign apk">
        <input message="Please enter keystore password (store:${keystore}):"
                       addproperty="keystore.password" />
        <echo>Signing apk...</echo>
        <exec executable="${jarsign}" logerror="true" osfamily="windows">
            <arg line="-verbose
            -keystore ${keystore}
            -storepass ${keystore.password}
            -signedjar ${out.classes.optimized.dir}/${signed.apk}
            ${out.classes.optimized.dir}/${unsigned.apk} ${keyalias}"/>
        </exec>
    </target>

    <target name="zipalign" depends="sign" description="zip align">
        <echo>Aligning apk...</echo>
        <exec executable="${zipalign}" logerror="true" osfamily="windows">
            <arg line="-f
            -v
            4
            ${out.classes.optimized.dir}/${signed.apk}
            ${final.apk}"/>
        </exec>
    </target>

</project>

This ANT task has to be added to Eclipse's builders (Properties/Builders) tasks after Java builder and before Android package builder.

Press "Build All" (it's better to off Automatic Build check in Eclipse menu)