ant script to obfuscate android code

2023-11-10 12:59

本文主要是介绍ant script to obfuscate android code,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

最近正在做CHINA区的build machine. J2ME已经开始大规模使用,公司最近要支持OPHONE手机,于是也把ANDROID支持到buildmachine里去。

 

 

android有自己的anttask.jar,没有SDK源码,于是想反编译anttasks.jar来获得,结果反编译后有些问题。所以只得自己硬着头皮写一个了。

 

网上有一哥们写了一个,不过拿下来有几个target没有,比如package-resource, 所以自己写了个完整的。 代码混淆也加上了。

 

<!--

Author: haibo.liu@glu.com
refer to http://just2us.com/2009/07/tutorial-obfuscate-an-android-application/

-->
<project name="myproject" default="debug-obf" basedir=".">

<property name="version" value="1_0_5" />

<property name="JDK_HOME" value="C:/Program Files/Java/jdk1.6.0_01" />
<property name="rootdir" value="./" />
<property name="outdir" value="./bin" />
<property name="outdir-classes" value="${outdir}/classes" />

<property name="outdir-compile-src" value="${outdir}/srctemp" />

<property name="sdk.dir" value="C:/tools/android-sdk21-windows" />
<property name="sdk.platform" value="${sdk.dir}/platforms/android-5" />
<property name="tool-aapt" value="${sdk.platform}/tools/aapt.exe" />
<property name="tool-dx" value="${sdk.dir}/tools/dx.bat" />
<property name="tool-apkbuilder" value="${sdk.dir}/tools/apkbuilder.bat" />
<property name="tool-jarsigner" value="${JDK_HOME}/bin/jarsigner.exe" />



<property name="pkres" value="${outdir}/${ant.project.name}.ap_" />
<property name="out-apk" value="C:/development/games/myproject/bin/${ant.project.name}_unalign.apk" />
<property name="outtemp-apk" value="C:/development/games/myproject/bin/${ant.project.name}_temp.apk" />

<property name="signed-apk" value="C:/development/games/myproject/bin/${ant.project.name}_${version}.apk" />


<property name="proguardlib" value="./tools/proguard-4.1.jar" />

<property name="library-jar" value="./libs" />
<property name="src.dir" value="./src" />
<property name="resource.dir" value="./res" />
<property name="externallibs" value="./libs" />
<property name="intermediate-dex-location" value="C:/development/games/myproject/bin/classes.dex" />
<property name="android-jar" value="${sdk.dir}/platforms/android-5/android.jar" />


<property file="local.properties" />
<property file="build.properties" />
<property file="default.properties" />
<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 />

<target name="package-resource" depends="clean">

<mkdir dir="${outdir}/classes"/>
<mkdir dir="${rootdir}/gen"/>
<exec executable="${tool-aapt}">
<arg line="package" />
<arg line="-f" />
<arg line="-m" />
<arg line="-J ${rootdir}/gen " />
<arg line="-M AndroidManifest.xml" />
<arg line="-S res" />
<arg line="-I ${android-jar}" />
<arg line="-F ${pkres}" />
</exec>
</target>


<target name="compile" depends="package-resource">

<mkdir dir="${outdir-compile-src}"/>

<copy todir="${outdir-compile-src}" overwrite="true">
<fileset dir="${src.dir}">
<exclude name="*svn" />
<include name="**/*.java" />
</fileset>
</copy>

<copy todir="${outdir-compile-src}" overwrite="true">
<fileset dir="${rootdir}/gen">
<exclude name="*svn" />
<include name="**/*.java" />
</fileset>
</copy>


<javac srcdir="${outdir-compile-src}" destdir="${outdir}/classes" debug="off" debuglevel="none" target="1.5" source="1.5">
<bootclasspath path="${android-jar}" />

</javac>
</target>


<target name="debug-obf" depends="dex-obf">

<exec executable="${tool-apkbuilder}">
<arg line="${out-apk}" />
<arg line="-u" />
<arg line="-z C:/development/games/myproject/${pkres}" />
<arg line="-f ${intermediate-dex-location}" />
</exec>
</target>

<target name="release-obf" depends="dex-obf">

<exec executable="${tool-apkbuilder}">
<arg line="${out-apk}" />
<arg line="-u" />
<arg line="-z C:/development/games/myproject/${pkres}" />
<arg line="-f ${intermediate-dex-location}" />
</exec>

</target>


<target name="optimize" depends="compile">
<jar basedir="${outdir-classes}" destfile="temp.jar" />

<java jar="${proguardlib}" fork="true" failοnerrοr="true">
<jvmarg value="-Dmaximum.inlined.code.length=32" />
<arg value="-injars temp.jar" />
<arg value="-outjars optimized.jar" />
<arg value="-libraryjars ${android-jar}" />

<arg value="-dontpreverify" />
<arg value="-dontoptimize" />
<arg value="-dontusemixedcaseclassnames" />
<arg value="-repackageclasses ''" />
<arg value="-allowaccessmodification" />
<arg value="-printmapping map.txt" />

<arg value="-keep public class com.seafit.android.**" />


<arg value="-optimizationpasses 1" />
<arg value="-verbose" />
<arg value="-dontskipnonpubliclibraryclasses" />
<arg value="-dontskipnonpubliclibraryclassmembers" />
</java>
<delete file="temp.jar" />
<delete dir="${outdir-classes}" />
<mkdir dir="${outdir-classes}" />
<unzip src="optimized.jar" dest="${outdir-classes}" />
<delete file="optimized.jar" />
</target>
<!-- Convert into .dex -->

<target name="dex-obf" depends="optimize">


<apply executable="${dx}" failοnerrοr="true" parallel="true">
<arg value="--dex" />
<arg value="--output=${intermediate-dex-location}" />
<arg path="${outdir-classes}" />
<fileset dir="${externallibs}" includes="*.jar" />
</apply>
</target>


<target name="signapk" depends="release-obf">

<copy file="${out-apk}" tofile="${outtemp-apk}" />

<exec executable="${tool-jarsigner}">
<arg line="-verbose" />
<arg line="-keystore ./key/.keystore" />
<arg line="-storepass spss" />
<arg line="-keypass android" />
<arg line="${outtemp-apk} android" />
</exec>

<exec executable="${tool-jarsigner}">
<arg line="-verify -certs ${outtemp-apk}" />


</exec>

<copy file="${outtemp-apk}" tofile="${signed-apk}" />
<delete file="${outtemp-apk}" />
</target>

<target name="clean">
<delete dir="${outdir}" />
</target>
</project>

这篇关于ant script to obfuscate android code的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382800

相关文章

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

JavaScript装饰器从基础到实战教程

《JavaScript装饰器从基础到实战教程》装饰器是js中一种声明式语法特性,用于在不修改原始代码的情况下,动态扩展类、方法、属性或参数的行为,本文将从基础概念入手,逐步讲解装饰器的类型、用法、进阶... 目录一、装饰器基础概念1.1 什么是装饰器?1.2 装饰器的语法1.3 装饰器的执行时机二、装饰器的

VS Code中的Python代码格式化插件示例讲解

《VSCode中的Python代码格式化插件示例讲解》在Java开发过程中,代码的规范性和可读性至关重要,一个团队中如果每个开发者的代码风格各异,会给代码的维护、审查和协作带来极大的困难,这篇文章主... 目录前言如何安装与配置使用建议与技巧如何选择总结前言在 VS Code 中,有几款非常出色的 pyt

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分