为了保护代码被反编译,android引入了混淆代码的概念

1.设置混淆

在工程下找到project.properties文件

在文件中加入proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt这个是系统的

也可以用自己的混淆文件(这样就可以配置一些自己的东西),去sdk.dir}/tools/proguard/ 下复制proguard-android.txt文件到本地工程中

然后设置成proguard.config=proguard-android.txt

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
proguard.config=proguard-android.txt # Project target.
target=android-17

2.配置自己的混淆文件proguard-android.txt

为了解决第三方包不被混淆,第三方包在混淆后,运行的时候会挂掉。我的错误是java.lang.ExceptionInInitializerError

E/AndroidRuntime( 9608): java.lang.ExceptionInInitializerError
E/AndroidRuntime( 9608): at a.a.b.f.<init>(Unknown Source)
E/AndroidRuntime( 9608): at a.a.b.e.<init>(Unknown Source)
E/AndroidRuntime( 9608): at a.a.c.dg.b(Unknown Source)
E/AndroidRuntime( 9608): at a.a.c.dg.a(Unknown Source)
E/AndroidRuntime( 9608): at a.a.c.b.a(Unknown Source)
E/AndroidRuntime( 9608): at a.a.c.ad.a(Unknown Source)
E/AndroidRuntime( 9608): at a.a.a.a(Unknown Source)
E/AndroidRuntime( 9608): at com.petsea.c.a(Unknown Source)
E/AndroidRuntime( 9608): at com.petsea.c.a(Unknown Source)
E/AndroidRuntime( 9608): at com.petsea.h.a(Unknown Source)
E/AndroidRuntime( 9608): at com.petsea.h.onPostExecute(Unknown Source)
E/AndroidRuntime( 9608): at android.os.AsyncTask.finish(AsyncTask.java:631)
E/AndroidRuntime( 9608): at android.os.AsyncTask.access$600(AsyncTask.java:177)
E/AndroidRuntime( 9608): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
E/AndroidRuntime( 9608): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 9608): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 9608): at android.app.ActivityThread.main(ActivityThread.java:5041)
E/AndroidRuntime( 9608): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 9608): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 9608): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime( 9608): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime( 9608): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 9608): Caused by: java.lang.ExceptionInInitializerError
E/AndroidRuntime( 9608): at a.a.b.l.<clinit>(Unknown Source)
E/AndroidRuntime( 9608): ... 22 more

最终我通过 加LOG的调试方法定位到是由于第三方jar包被混淆后的原因导致的。

3解决方法:

在proguard-android.txt文件最后加入了-keep class org.jsoup.**这样一句代码,就是保持这个类不被混淆

附上proguard-android.txt源文件

# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html -dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose # Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
-dontoptimize
-dontpreverify
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own project configuration file;
# instead you will need to point to the
# "proguard-android-optimize.txt" file instead of this one from your
# project.properties file. -keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
native <methods>;
} # keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
} # We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
} # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
} -keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
} -keepclassmembers class **.R$* {
public static <fields>;
} # The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.** -keep class org.jsoup.**

Android 代码混淆及第三方jar包不被混淆的更多相关文章

  1. eclipse打包jar及第三方jar包一起导出(生成SDK)

    一.前言: 因公司需求,需要将某个工具类供外部使用,所以需要生成jar文件.但是jar内还包含了第三方的jar,普通的打包方式无法将lib下的第三方jar包提取. 这将会导致工具jar无法运行,或Ex ...

  2. android studio 使用gradle 导出jar包,并打包assets目录

    警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...

  3. [转]--android studio 使用gradle 导出jar包,并打包assets目录

    转自: http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html   最近项目在做一个sdk,供别的开发者使 ...

  4. Android中库项目、jar包等的使用方法

    在软件开发过程中,程序代码的复用,是非常重要的概念.我们总是需要使用一些现有的模块.包.框架,或开发自己的模块.包.框架,来实现对程序代码的复用.比如在JavaWeb编程过程中,经常使用的Struts ...

  5. Android多module下重复jar包问题

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/166 Android多module下重复jar包问题 An ...

  6. 不要轻易在java ext 目录放任何三方jar包

    今天在编写一个简单spi 应用demo的时候,在编译时总有一个其他的错误,如下: ERROR Failed to execute goal org.apache.maven.plugins:maven ...

  7. Android framework编译出来的jar包classes.jar的位置

    在源码环境下编译 Android framework编译出来的jar包classes.jar的位置  out/target/common/obj/JAVA_LIBRARIES/framework_in ...

  8. 《android 导入第三方源码jar包遇到的坑》

    最近想做个app,里面需要有一个二维码扫描的功能,然后谷歌之后发现Zxing这个用的人好多,就看看怎么用: 然后就在github上拉下他们的源码,导入eclipse,然后编译之后导出为jar文件[用的 ...

  9. android中正确导入第三方jar包

    android中正确导入第三方jar包 andriod中如果引入jar包的方式不对就会出现一些奇怪的错误. 工作的时候恰好有一个jar包需要调用,结果用了很长时间才解决出现的bug. 刚开始是这样引用 ...

随机推荐

  1. AOP的实现原理——动态代理

    IOC负责将对象动态的 注入到容器,从而达到一种需要谁就注入谁,什么时候需要就什么时候注入的效果,可谓是招之则来,挥之则去.想想都觉得爽,如果现实生活中也有这本事那就爽 歪歪了,至于有多爽,各位自己脑 ...

  2. PHP冒泡排序,选择排序,插入排序

    1  冒泡排序是两个元素相互比较,找到最小值,然后冒泡到最后,代码如下:

  3. 微软提供了三个核心服务:Windows+Office 365+Azure

    微软提供了三个核心服务:Windows+Office 365+Azure 英语新闻来源:http://techcrunch.com/2014/11/10/microsofts-ceo-breaks-d ...

  4. 改动mac环境变量,并配置gradle

    由于项目中要用到gradle命令,可是没有配置环境变量.这里记录一下解决过程. 过程例如以下: 1. 启动终端Terminal 2. 进入当前用户的home文件夹 输入cd ~ 3. 创建.bash_ ...

  5. FullCalendar 的学习笔记(一)

    前一段时间,一个老项目需要新增一个小功能,日程表~ 于是网上找了下,发现FullCalendar这个控件还不错于是就拿来用了下,下面简单介绍下我的学习笔记. 首先就是了解下FullCalendar的A ...

  6. ScrollView 的使用(非原创)

    1.ScrollView滚动视图是指当拥有很多内容,屏幕显示不完时,需要通过滚动跳转来显示的视图.ScrollView只支持垂直滚动 <ScrollView xmlns:android=&quo ...

  7. ms sql 根据表名查询 表中所有字段的属性值 sql语句

    SELECT表名=case when a.colorder=1 then d.name else '' end,--表说明=case when a.colorder=1 then isnull(f.v ...

  8. iOS开发 数据库FMDB

    iOS开发  数据库FMDB 1.简介 需求作用: 如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目 常用的数据库: (1)Microsoft SQL Server 2000 ...

  9. (转) 制作 Clonezilla live 启动盘

    GNU/Linux Method A: Tuxboot 下載 GNU/Linux 版本使用的 Tuxboot 在您的環境 在 GNU/Linux 下, 請依 指示 來執行 Tuxboot 並安裝再生龍 ...

  10. 一个数n的最大质因子

    #include<cstdio> #include<cmath> using namespace std; #define Max(x, y) (x > y ? x : ...