混淆Android JAR包的方法
http://blog.csdn.net/vurtne_ye/article/details/35599491
1)导出jar包
如何在eclipse上Android工程中导出jar包?google,baidu.bing
2)混淆jar包,打乱代码
android的jar包跟普通的Java的jar包不一样,我们不想打乱一些activity或者server等跟系统打交道的代码,这是因为如果把这些也混淆了,那你还需要搞清楚混淆后这些activity变成了什么名字,然后告诉使用你这个jar包的人androidmanifest.xml中增加这些打乱了名字的activity。
混淆jar包用到的工具是proguard,可以在android SDK里面找到,如我的是在...\adt-bundle-windows-x86-20130219\sdk\tools\proguard。
运行sdk\tools\proguard\bin\proguardgui.bat,运行界面如下,如果点击next,会发现这些配置很难配(全英文,又很杂)。
其实这里直接导入一个cfg文件就可以了,单击下图右下角的Load Configuration,然后选择配置文件。

配置文件又要怎么写?找到android工程里面的proguard.cfg文件,这个文件是用来混淆apk代码的配置文件,我们现在是要混淆jar包的代码,当然不能直接用。看下面是proguard.cfg的配置,配置会保留activity和server等一些类。这些配置都是不用改的,可以直接拿来用。
-optimizationpasses5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-keeppublic class *extends android.app.Activity-keeppublic class *extends android.app.Application-keeppublic class *extends android.app.Service-keeppublic class *extends android.content.BroadcastReceiver-keeppublic class *extends android.content.ContentProvider-keeppublic class *extends android.app.backup.BackupAgentHelper-keeppublic class *extends android.preference.Preference-keeppublic class com.android.vending.licensing.ILicensingService-keepclasseswithmembernamesclass * { native <methods>;}-keepclasseswithmembersclass * { public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembersclass * { public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembersclass *extends android.app.Activity { public void *(android.view.View);}-keepclassmembersenum * { public static **[] values(); public static ** valueOf(java.lang.String);}-keepclass *implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;} |
将上面的配置增加几行改成如下,并重新命名文件为:test.pro
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*//...begin#混淆后的导出jar包的位置和jar包名-outjars'E:\test_after.jar'#原始jar包的位置和jar包名-injars'E:\test.jar'#jar包依赖的其他库的位置和名称-libraryjars'E:\workspace\beautytilepuzzle\libs\alipay_msp.jar'-libraryjars'E:\workspace\beautytilepuzzle\libs\android-support-v4.jar'-libraryjars'E:\android\adt-bundle-windows-x86-20130219\sdk\platforms\android-10\android.jar'#下面的Test类将不会被混淆,这样的类是需要被jar包使用者直接调用的-keeppublic class com.example.Test { public <fields>; public <methods>;}//...end-keeppublic class *extends android.app.Activity |
现在Load Configuration里选择上面test.pro,一直next,最后混淆后的jar包就是E://test_after.jar。
用winrar打开jar包,会发现除了Test.class,一些继承自activity等的class外,其他的类都被abcdefg这样的字母给混淆了。
提醒:如果你把上面配置直接拷贝过去,是会失败的,请将文件里的#号后的中文注释去掉,或者改成英文的。
混淆Android JAR包的方法的更多相关文章
- [Android]proguard重新编译和如何不混淆第三方jar包
转载自:http://glblong.blog.51cto.com/3058613/1536516 一.ant安装.环境变量配置及验证 (一)安装ant 到官方主页http://ant.apache. ...
- Android jar包混淆
具体可参考http://proguard.sourceforge.net/manual/examples.html#library 1.找到android的adt目录下的 D:\soft\adt-bu ...
- 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...
- 导入外部jar包的方法
注:使用的编译平台为eclipse <算法>一书中需要引入外部jar包(algs4.jar),因此特地去学了下导入外部jar包的方法.步骤如下: 1.先将algs4.jar拷到j如下路径: ...
- 打jar包的方法
打jar包的方法是什么? java打jar包,引用其他.jar文件 java项目打jar包 将java源码打成jar包 maven打jar例子 打war包的方法是什么? Eclipse->项目右 ...
- maven导入外部jar包的方法
maven的导入外部jar包的方法(前提还有外部jar包) 1.问题: 在maven添加依赖包时,添加不成功,可以选择通过外部命令导入到仓库里. 2.命令:(在Dos命令行) mvn install: ...
- jsp的服务器响应,out.println 与response.setIntHeader的报错解决方案,附:导入jar包的方法
在九大内置对象中,笔者认为用的最多的就是out.println 与response.setIntHeader,今天刚写了一个服务器响应的代码,也总是这两个报错.具体请看图. 先来说说response. ...
- 双击jar包运行方法
方案一 在jar包同级,写个bat文件,如下 java -jar Xxx.jar pause 方案二 右击jar文件 ->打开方式->选择安装的jre/bin/javaw.exe. 双击依 ...
- AndroidStudio 3.0 生成jar包的方法
AndroidStudio3.0生成jar包的方法,一下将逐步演示流程,及步骤讲解 1:新建样例工程,目录如下 2:鼠标右键点击app->New->选择Module 选择AndroidLi ...
随机推荐
- 基于HTML5 audio元素播放声音jQuery小插件
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1609 一.前面的些唠 ...
- 怎么获取Android应用程序的上下文
在一个应用里面,有很多activity,而这些activity之间经常要进行互相启动.往复跳转.还有就是通过Notification启动.当activity多了之后,如果设置他的模式为单例模式,或者不 ...
- C++11写算法之顺序查找
从这篇博文起,将尝试使用C++11来写常用算法与数据结构. 本篇博文以最简单的顺序查找作为系列博文的起点,并作约定如下: 1,变量名 : varList : 函数名 : SequentialFind ...
- 在CentOS中安装输入法
1.需要root权限,所以要用root登录 ,或su root 2.yum install "@Chinese Support" 3.exit 4.回到桌面,system-> ...
- Codeforces Beta Round #25 (Div. 2)--A. IQ test
IQ test time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...
- Java之美[从菜鸟到高手演变]之字符串
一.String 1.String简介 初始化: 一般由String声明的字符串,长度是不可变的,这也是它与StringBuffer和StringBuilder最直观的一个区别.一般初始化方式:Str ...
- CSU-1632 Repeated Substrings[后缀数组求重复出现的子串数目]
评测地址:https://cn.vjudge.net/problem/CSU-1632 Description 求字符串中所有出现至少2次的子串个数 Input 第一行为一整数T(T<=10)表 ...
- EasyNVR互联网监控直播分发出RTMP、HLS、HTTP-FLV视频流说明介绍
背景需求 需求比视频流协议更重要,你想要什么,什么可以满足你的需求,这个很大程度上是需求在前,选择使用什么视频流是比较靠后的. 目前Easy系列互联网直播服务将全线支持HLS.RTMP.HTP-FLV ...
- TimeStamp 毫秒和纳秒
毫秒 /** * Returns the time represented by this Timestamp object, as a long value * containing the num ...
- Linux中命令查找顺序
第一优先级:用绝对路径或相对路径执行的命令第二优先级:别名指定的命令第三优先级:Bash内部命令第四优先级:$PATH环境变量定义的目录查找顺序中找到的第一个命令