忙了三四周,总算把购开心的ios版(appStore搜“购开心”)成功翻译成了android版,UI效果基本保持一致,上一张UI效果图吧,很养眼的:

还不错吧,进入正题吧。

以前一直是让我徒弟混淆和打包的,这个就剩下我一个人了,弄了一次,时间太久了,还太麻烦了,于是,我就研究了下ant打包,下面就简单说下吧:

首先,做任何开发前,肯定是各种环境搭建和配置啊,ant的搭建很简单:

一、安装ant

到官方主页http://ant.apache.org下载新版(目前为Ant-1.9.2)的ant,得到的是一个apache-ant-1.8.1-bin.zip的压缩包。将其解压到你的硬盘上,例如:D:\Android\apache-ant-1.9.2

二、配置环境变量

window中设置ant环境变量:

ANT_HOME    D:/Android/apache-ant-1.9.2

path             D:/Android/apache-ant-1.9.2/bin

classpath      D:/Android/apache-ant-1.9.2/lib

linux中设置ant环境变量:

root用户登陆,用vi编辑器修改root目录下的".bash_profile"属性文件,假设Ant安装在/user/local/ant目录下,要在文件的最后加上

"exportANT_HOME=/user/local/ant"和"export PATH=$PATH:$ANT_HOME/bin"

三、验证ant

为了验证ant是否成功安装,可以进行如下操作:

依次选择:开始->运行->cmd,输入如下命令:ant

如果出现如下内容,说明安装成功:

Buildfile: build.xml does not exist!

Build failed

当然,JAVA_HOME、ANDROID_SDK_HOME等的配置这里就不说了

四、我们就在项目中添加build.xml

code如下:

name="HappyShopping"

default="release" >

name="appName"

value="${ant.project.name}" />

name="sdk-folder"

value="${env.ANDROID_SDK_HOME}" />

name="sdk-platform-folder"

value="${sdk-folder}/platforms/android-16" />

name="sdk-tools"

value="${sdk-folder}/tools" />

name="sdk-platform-tools"

value="${sdk-folder}/platform-tools" />

name="aapt"

value="${sdk-platform-tools}/aapt" />

name="aidl"

value="${sdk-platform-tools}/aidl" />

name="dx"

value="${sdk-platform-tools}/dx.bat" />

name="apkbuilder"

value="${sdk-tools}/apkbuilder.bat" />

name="jarsigner"

value="${env.JAVA_HOME}/bin/jarsigner" />

name="android-jar"

value="${sdk-platform-folder}/android.jar" />

name="android-maps-jar"

value="${sdk-folder}/add-ons/addon_google_apis_google_inc_8/libs/maps.jar" />

name="framework-aidl"

value="${sdk-platform-folder}/framework.aidl" />

name="outdir-gen"

value="gen" />

name="outdir-bin"

value="bin" />

name="manifest-xml"

value="AndroidManifest.xml" />

name="resource-dir"

value="res" />

name="asset-dir"

value="assets" />

name="srcdir"

value="src" />

name="srcdir-ospath"

value="${basedir}/${srcdir}" />

name="external-lib"

value="libs" />

name="external-lib-ospath"

value="${basedir}/${external-lib}" />

name="outdir-classes"

value="${outdir-bin}" />

name="outdir-classes-ospath"

value="${basedir}/${outdir-classes}" />

name="dex-file"

value="classes.dex" />

name="dex-path"

value="${outdir-bin}/${dex-file}" />

name="dex-ospath"

value="${basedir}/${dex-path}" />

name="resources-package"

value="${outdir-bin}/resources.ap_" />

name="resources-package-ospath"

value="${basedir}/${resources-package}" />

name="out-unsigned-package"

value="${outdir-bin}/${appName}-unsigned.apk" />

name="out-unsigned-package-ospath"

value="${basedir}/${out-unsigned-package}" />

name="keystore-file"

value="${basedir}/naomi" />

name="out-signed-package"

value="${outdir-bin}/${appName}.apk" />

name="out-signed-package-ospath"

value="${basedir}/${out-signed-package}" />

name="proguard-home"

value="D:/Android/android-sdk-windows/tools/proguard/lib" />

Initializing all output directories...

name="gen-R"

depends="init" >

Generating R.java from the resources...

executable="${aapt}"

failοnerrοr="true" >

name="aidl"

depends="gen-R" >

Compiling .aidl into java files...

executable="${aidl}"

failοnerrοr="true" >

name="compile"

depends="aidl" >

Compiling java source code...

bootclasspath="${android-jar}"

destdir="${outdir-classes}"

encoding="utf-8"

srcdir="."

target="1.5" >

dir="${external-lib}"

includes="*.jar" />

name="proguard"

depends="compile" >

Proguad ....

basedir="${outdir-classes}"

destfile="temp.jar" />

failοnerrοr="true"

fork="true"

jar="${proguard-home}/proguard.jar" >

dest="${outdir-classes}"

src="optimized.jar" />

name="dex"

depends="proguard" >

Converting compiled files and external libraries into a .dex file...

executable="${dx}"

failοnerrοr="true" >

Packaging resources and assets...

executable="${aapt}"

failοnerrοr="true" >

name="package"

depends="dex, package-res-and-assets" >

Packaging unsigned apk for release...

executable="${apkbuilder}"

failοnerrοr="true" >

It will need to be signed with jarsigner before being published.

name="jarsigner"

depends="package" >

Packaging signed apk for release...

executable="${jarsigner}"

failοnerrοr="true" >

name="release"

depends="jarsigner" >

delete unsigned apk

copy apk from ${out-signed-package-ospath} to D:/workspaceAndroid/Release/happyShopping.apk

file="${out-signed-package-ospath}"

tofile="D:/workspaceAndroid/Release/happyShopping.apk" />

clean the workspace bin folder....

如果不需要混淆代码,去掉上面的 proguard相关的配置就可以了

五、配置proguard属性:

proguard-project.txt

# To enable ProGuard in your project, edit project.properties

# to define the proguard.config property as described in that file.

#

# Add project specific ProGuard rules here.

# By default, the flags in this file are appended to flags specified

# in ${sdk.dir}/tools/proguard/proguard-android.txt

# You can edit the include path and order by changing the ProGuard

# include property in project.properties.

#

# For more details, see

# http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following

# and specify the fully qualified class name to the JavaScript interface

# class:

#-keepclassmembers class fqcn.of.javascript.interface.for.webview {

# public *;

#}

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontskipnonpubliclibraryclassmembers

-dontskipnonpubliclibraryclasses

-dontpreverify

-libraryjars libs/android-support-v4.jar

-libraryjars libs/core.jar

-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-dontwarn android.support.v4.**

-keep class android.support.v4.app.** { *; }

-keep interface android.support.v4.app.** { *; }

-keep class com.actionbarsherlock.** { *; }

-keep interface com.actionbarsherlock.** { *; }

-keepattributes *Annotation*

-keep public class * extends android.app.Activity

-keep public class * extends android.support.v4.app.Fragment

-keep public class * extends android.support.v4.app.FragmentActivity

-keep public class * extends android.app.Application

-keep public class * extends android.app.Service

-keep public class * extends android.content.BroadcastReceiver

-keep public class * extends android.content.ContentProvider

-keep public class * extends android.app.backup.BackupAgentHelper

-keep public class * extends android.preference.Preference

-keep public class * extends blockcheng.BssicAct

-keep public class * extends blockcheng.controller.BCFragment

-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {

native ;

}

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet, int);

}

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keepclassmembers class * {

public (org.json.JSONObject);

}

-keep public class blockcheng.R$*{

public static final int *;

}

-keep public class blockcheng.controller.BlockchengClass.JavaScriptInterface {

public ;

}

-keepnames class blockcheng.controller.BlockchengClass$* {

public ;

public ;

}

-keepnames class blockcheng.controller.BlockchengClass$* {

public ;

public void showContacts();

}

上面的配置中,blockcheng、BC等开头的类,都是被我替换的,不是真实的,具体的类包名和类名,以各人自己的为主。 注意,这个混淆中,开始几行配置很重要,网上很多同学问的ant、proguard相关的错误(什么找不到app.android.v4类等),都是因为缺少这几行导致,但没人回答,这里,我就直接给出了:

-libraryjars libs/android-support-v4.jar

-libraryjars libs/core.jar

-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-dontwarn android.support.v4.**

-keep class android.support.v4.app.** { *; }

-keep interface android.support.v4.app.** { *; }

-keep class com.actionbarsherlock.** { *; }

-keep interface com.actionbarsherlock.** { *; }

-keepattributes *Annotation*

-keep public class * extends android.app.Activity

-keep public class * extends android.support.v4.app.Fragment

-keep public class * extends android.support.v4.app.FragmentActivity

这个配置主要是针对 android-support.v4和库相关的,请需要的同学注意。

最后的几行配置,是因为我代码中调用了asset中js文件导致的,js相关的操作代码,是不可以混淆的,故需要避开。

六、运行ant命令,构建开始:

命令行输入类似: D:/Android/apache-ant-1.9.2/bin/ant.bat -buildfile D:/workspa

ceAndroid/naomiHappyShopping/build.xml

就可以完成代码混淆和apk输出:

.......

release:

[echo]

[echo] delete unsigned apk

[echo]

[delete] Deleting: D:\workspaceAndroid\naomiHappyShopping\bin\HappyShoppingAn

t-unsigned.apk

[echo]

[echo] copy apk from D:\workspaceAndroid\naomiHappyShopping

/bin/HappyShoppingAnt.apk to D:/workspaceAndroid/Release/happyShopping.apk

[echo]

[copy] Copying 1 file to D:\workspaceAndroid\Release

[echo]

[echo] clean the workspace bin folder....

[echo]

[delete] Deleting directory D:\workspaceAndroid\naomiHappyShopping\bin

[echo]

[echo]

BUILD SUCCESSFUL

Total time: 41 seconds 看看时间,是不是比手动方便多了啊,而且反编译一看,代码真的不能再读了。

另外注意:不同人的路径等配置,需要根据各人自己的来,不能直接拷贝引用。

java 混淆 ant_Ant编译android,并Proguard代码混淆,v4混淆配置相关推荐

  1. 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )

    文章目录 一.Android 平台代码调试器代码 二.Android.mk 构建脚本内容 三.Application.mk 构建脚本内容 四.正式编译 五.博客资源 一.Android 平台代码调试器 ...

  2. 编译Android系统源码推荐的电脑配置

    工欲善其事,必先利其器. 看到很多客户,搞Android产品开发,用的电脑配置是惨不忍睹. 这些老板脑子有坑吗... ------------ 编译Android9推荐电脑配置: 处理器:酷睿i7 5 ...

  3. java jni librtmp_编译Android平台libRTMP库

    操作系统: Mac OSX NDK: android-ndk-r10e-darwin-x86_64 编译目标: librtmp.a librtmp.so 简介 Android 官方提供了三种编译方式, ...

  4. 编译android 7.1 jdk版本,ubuntu14.04 安装 open-jdk-1.8,下载编译 android nougat 7.1.1

    一,ubuntu14.04 安装 open-jdk-1.8 在 ubuntu 下,把jdk 解压到 /usr/lib/jvm/ 目录下,配置环境变量,就ok. 下面是我已经安装的jdk crg@crg ...

  5. 编译Android系统源码--搭建环境

    下载Ubantu14 Google官方建议使用Ubuntu 14 下载路径 双系统安装参考 下载VMware 建议:VMware Workstation 16 Pro 下载路径 下载Android系统 ...

  6. [转]Android 项目的代码混淆,Android proguard 使用说明

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  7. Android笔记:防反编译、代码混淆中,解决第三方jar包不被混淆的一些心得,及gson防混淆方法...

    为了防止代码被反编译,一般在签名导出前需要对代码进行混淆.最近发现自己的一个项目工程在代码混淆后,使用中出现了异常.以下是自己这几天在解决代码混淆以及引入第三方jar包导致混淆出现的问题处理的一些心得 ...

  8. apk反编译(6)用ProGuard 混淆、压缩代码,压缩资源。

    1.android官方文档 https://developer.android.com/studio/build/shrink-code  主要内容如下: 1.1 压缩代码 混淆生成的文件:<m ...

  9. android 万能混淆文件,Android ProGuard 代码压缩混淆与打包优化

    为什么要启动ProGuard(所有试验都在AS 环境) 代码压缩通过 ProGuard 提供,ProGuard 会检测和移除封装应用中未使用的类.字段.方法和属性, 包括自带代码库中的未使用项(这使其 ...

最新文章

  1. ICLR 2022 || 通过邻域/度/初始特征重建的等图自编码器
  2. gdk_draw_arc这个函数
  3. 爬取广州所有停车场数据(Python)(并行加速版本)
  4. dedian系统云服务器,云服务器选择Ubuntu还是Debian镜像系统?根据熟悉度选择
  5. 电脑没有ps怎么改照片dpi_设计干货整理丨 平面设计师必知的打印常识与电脑性能...
  6. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_3_线程安全问题产生的原理...
  7. 解码H264帧要注意的两个问题
  8. C语言杨辉三角形代码
  9. 【vue 四级联动】
  10. Matlab中插值函数汇总及使用说明
  11. https://github.com/qiangqiang666/demo
  12. 北京大学肖臻老师《区块链技术与应用》公开课-ETH
  13. 大学英语六级考试题型分值分配、时间分配、做题策略
  14. python 实现多元线性回归
  15. android 实现果冻动画效果,手把手教你绘制Android粘性果冻动画组件
  16. 同一个无线局域网(wifi)内,两台电脑无法通过ip通信
  17. leetcode1055
  18. 给WPS文档加密码的多种方法
  19. 超能陆战队中的微型机器人现已实现!
  20. vue中设置显示默认图片

热门文章

  1. 什么是职业规划?如何进行职业规划?
  2. C语言使用strcmp()函数对两个汉字字符进行比较
  3. IBM CRL实习感受
  4. python制作课程表提醒_10行Python代码制作群聊提醒小助手,再也不怕漏掉消息了...
  5. 微信HOOK 删除好友
  6. 2017qq红包雨最强攻略
  7. 部门来了个跳槽出来的测试开发,听说是00后,上来一顿操作给我看呆了...
  8. Java基础语法等等
  9. 代码中超魔性图片注释
  10. [翻译]什么是Istio? 它是服务网格。棒极了,那什么是服务网格?