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实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

javascript中break与continue的区别

在javascript中,break是结束整个循环,break下面的语句不再执行了 for(let i=1;i<=5;i++){if(i===3){break}document.write(i) } 上面的代码中,当i=1时,执行打印输出语句,当i=2时,执行打印输出语句,当i=3时,遇到break了,整个循环就结束了。 执行结果是12 continue语句是停止当前循环,返回从头开始。

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param