三星T819三星和联想显示器VIBE A有什么区别

Android 代码混淆及第三方jar包不被混淆
为了保护代码被反编译,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
[java] #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt&
proguard.config=proguard-android.txt&
# Project target.&
target=android-17&
#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
[java]& E/Runtime( 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&
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源文件
[html] # This is a configuration file for ProGuard.&
# http://proguard.sourceforge.net/index.html#manual/usage.html&
-dontusemixedcaseclassnames&
-dontskipnonpubliclibraryclasses&
# 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 projec&
# 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.**&
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
# 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 projec
# 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.**1299人阅读
Android学习笔记 混淆jar包
Android学习笔记(132)
前面文章《Proguard进行源代码混淆》讲解过怎么使用Proguard工具对的源代码进行混淆的方法(感兴趣的朋友可以访问:),但是在实际工作中发现,通过上述方法对导出的Jar并没有进行混淆。&
下面我们就介绍,如果对导出的Jar包进行代码混淆。&
一、准备工作&
首先我们要准备好:1.你已经导出的jar包(srcjar.jar)文件,2.ProguardGui工具&(sdk\tools\proguard\bin\proguardgui.bat)。&
二、操作步骤&
1.启动proguardgui工具。&
双击groguardgui.bat文件,运行如下图:&
如果你有自己已经写好的proguard.cfg文件,这里直接引用即可,但是记得不要在里面加入支持引用
包相关的文字,如:
2.设置我们需要混淆的jar包和混淆后输出的jar包。&
点击左边的Input/Output按钮,运行如下图。在点击Add&input按钮,添加我们需要进行混淆的jar包(srcjar.jar)。点击Add&output按钮,填入我们要输出的jar包的名称。&
3.添加jar包支持的库。&
点击下面的Add按钮,一一添加jar包支持的库。建议把你的Eclipe中,项目下所有的jar包都拷贝到一个统一的目录中,然后进行添加。&
项目中所有的jar支持&
这里一定要特别注意:
android.jar和rt.jar两个系统jar包是必须要引用的,android.jar引用当前sdk版本的jar,而rt.jar在JDK目录下的jre下的lib目录下,
同时特别注意,rt.jar在某些proguard上只支持1.7以下的版本,所以可能需要降级到1.7的jdk才可以,或者从别人那拷贝一份来。
集中了所有的jar在同一个文件夹下&
添加了jar包支持的库&
4.依次设置混淆的各种配置&
依次点击Shrinking按钮、Obfuscation按钮、Optimization按钮和Information按钮,分别对混淆进行各种配置。&
5.保存混淆的配置文件&
点击Process按钮,在点击Save&configuration按钮,保存我们混淆配置文件。&
6.根据需求修改混淆配置文件&
在真实的项目中,可能由于各种第三方的jar包,自动类和控件等问题,在混淆的时候,会导致各种类无法找到的问题。使用文本编辑器打开srcjar.pro文件,可以根据自己的需求编辑混淆配置。&
一般外部引用到的类及接口都不要进行混淆,keep class和keep interface是通用的,两种写法都可以,其次最好不要引用太多第三方包,容易出问题。
7.载入混淆配置文件,对Jar进行混淆&
重新启动proguardgui程序,在点击右边Proguard按钮,点击Load&configration按钮,导入上面配置好的混淆文件。&
然后点击右边Process按钮,再次点击下面的Process按钮,进行Jar的混淆。&
如出现上图successfully提示,则混淆完毕&
转载自:http://blog.csdn.net/p/article/details/
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:569517次
积分:5613
积分:5613
排名:第4099名
原创:29篇
转载:123篇
评论:113条
(2)(1)(2)(2)(2)(1)(1)(1)(5)(1)(4)(4)(5)(2)(1)(3)(1)(2)(2)(1)(2)(10)(1)(5)(3)(3)(13)(10)(17)(1)(9)(15)(5)(1)(12)(2)利用Ant与Proguard混淆引用的子工程项目jar包及打war包 - Java开发与学习 - ITeye技术网站
博客分类:
当前的web项目有引用到子工程项目,而且多个子工程项目也有引用到其它的工程项目,现要求利用Ant自动将web项目打包成war包,其中引用到的子工程项目需打成jar包,而且必须是混淆后的jar包。其中混淆代码的工具选择了开源的Proguard(),可以运行proguard自带的proguardgui.jar(图形化用户界面)生成proguard配置文件。
ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类,字段和方法.
ProGuard的使用是为了:
1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用.
2.创建的程序和程序库很难使用反向工程.
3.所以它能删除来自源文件中的没有调用的代码
4.充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件.
-include {filename}
从给定的文件中读取配置参数
-basedirectory {directoryname}
指定基础目录为以后相对的档案名称
-injars {class_path}
指定要处理的应用程序jar,war,ear和目录
-outjars {class_path}
指定处理完后要输出的jar,war,ear和目录的名称
-libraryjars {classpath}
指定要处理的应用程序jar,war,ear和目录所需要的程序库文件
-dontskipnonpubliclibraryclasses
指定不去忽略非公共的库类。
-dontskipnonpubliclibraryclassmembers
指定不去忽略包可见的库类的成员。
-keep {Modifier} {class_specification}
保护指定的类文件和类的成员
-keepclassmembers {modifier} {class_specification}
保护指定类的成员,如果此类受到保护他们会保护的更好
-keepclasseswithmembers {class_specification}
保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。
-keepnames {class_specification}
保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)
-keepclassmembernames {class_specification}
保护指定的类的成员的名称(如果他们不会压缩步骤中删除)
-keepclasseswithmembernames {class_specification}
保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)
-printseeds {filename}
列出类和类的成员-keep选项的清单,标准输出到给定的文件
-dontshrink
不压缩输入的类文件
-printusage {filename}
-whyareyoukeeping {class_specification}
-dontoptimize
不优化输入的类文件
-assumenosideeffects {class_specification}
优化时假设指定的方法,没有任何副作用
-allowaccessmodification
优化时允许访问并修改有修饰符的类和类的成员
-dontobfuscate
不混淆输入的类文件
-printmapping {filename}
-applymapping {filename}
重用映射增加混淆
-obfuscationdictionary {filename}
使用给定文件中的关键字作为要混淆方法的名称
-overloadaggressively
混淆时应用侵入式重载
-useuniqueclassmembernames
确定统一的混淆类的成员名称来增加混淆
-flattenpackagehierarchy {package_name}
重新包装所有重命名的包并放在给定的单一包中
-repackageclass {package_name}
重新包装所有重命名的类文件中放在给定的单一包中
-dontusemixedcaseclassnames
混淆时不会产生形形色色的类名
-keepattributes {attribute_name,...}
保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.
-renamesourcefileattribute {string}
设置源文件中给定的字符串常量
因为我们开发的是struts2+spring+openjpa的架构的项目,所有需要很详细的配置,其中proguard需要的injars,outjars还有其它的一些libraryjars在Ant的build.xml文件以参数形式加入。
proguard.pro文件具体内容:
-libraryjars
&java.home&/lib/rt.jar
-libraryjars
&java.home&/lib/jce.jar
-libraryjars
&java.home&/lib/jsse.jar
-obfuscationdictionary dictionaries/compact.txt
-classobfuscationdictionary dictionaries/shakespeare.txt
# -printmapping proguard.map
-overloadaggressively
-defaultpackage ''
# -flattenpackagehierarchy ''
# -dontusemixedcaseclassnames
# -keeppackagenames
-allowaccessmodification
-dontoptimize
# 因为项目中使用到了jpa的Annotation注解,需要保留这个属性
-keepattributes *Annotation*
# Keep web listener-class,自己编写的web listener,不能混淆,不然启动服务的时候会报错
-keep public class com.test.mylistener {
public protected *;
# Keep jpa dao, 自身编写的一些dao接口不能混淆,而且如果是有被spring管理的dao, 也应该不进行混淆
-keep public class com.test.dao.* {
public protected *;
# 其中jpa dao中使用到的一些重要接口也能进行混淆
-keep public class com.test.persistence.core.QueryLiteral {
public protected *;
-keep public class com.test.persistence.JpaDao {
public protected *;
# Keep beans managed by spring framework,spring管理的bean不进行混淆
-keep public class com.test.provider.* {
public protected *;
# Keep Network interface
-keep public class com.test.loader.Network {
public protected *;
# Keep entity classes extends java.io.Serializable
# 保留jpa中使用到的所有实体类,不进行混淆
-keep public class * implements java.io.Serializable{
public protected private *;
-keep public class com.test.entity.* {
public protected private *;
# Keep - Applications. Keep all application classes, along with their 'main' methods.
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
native &methods&;
proguard和build.xml文件具体目录结构:
server工程
-build目录
-proguard目录
-dictionaries 主要存放混淆时需要用到字典文件,可以使用官网下载到的proguard.zip包中dictionaries的两个文件(dictionaries/compact.txt,dictionaries/shakespeare.txt)
-lib 存放proguard.jar包,这是混淆中使用到的最主要的一个jar包(下载到的proguard.zip中)
-proguard.pro
主要的混淆配置文件
-build.xml
Ant的build.xml文件编写如下:
&?xml version="1.0" encoding="UTF-8"?&
&project name="com.ibm.crl.scm.crc.server" default="dist" basedir="."&
&target name="init" description="设置初始化打war包需要的路径变量"&
&!-- 你的eclipse工作空间站目录路径,以备引用到子工程项目使用--&
&property name="workspace" value="${basedir}/../"/&
&!-- 需要被打包成war包的主工程项目--&
&property name="server.name" value="server"/&
&!-- 主工程项目引用到的其它子工程项目--&
&property name="childproject1.name" value="childproject1"/&
&property name="childproject2.name" value="childproject2"/&
&property name="src" value="${basedir}/src"/&
&property name="resources" value="${basedir}/resources"/&
&property name="lib" value="${basedir}/WebContent/WEB-INF/lib"/&
&property name="webapp" value="${basedir}/WebContent"/&
&property name="proguard" value="${basedir}/proguard"/&
&property name="proguard.lib" value="${proguard}/lib"/&
&property name="build.src" value="${basedir}/build/src"/&
&property name="build.dest" value="${basedir}/build/WEB-INF/classes"/&
&property name="buildwar.dest" value="${basedir}/build/server"/&
&property name="war.dest" value="${basedir}/build/war"/&
&!-- 该目录是存储引用到的子工程混淆后的jar包--&
&property name="referenced.lib" value="${basedir}/build/referenced"/&
&path id="classpath"&
&fileset dir="${referenced.lib}"&
&include name="**/*.jar"/&
&/fileset&
&fileset dir="${lib}"&
&include name="**/*.jar"/&
&/fileset&
&target name="prepare" depends="init" description="创建打包需要的路径,拷贝源文件到打包路径下"&
&mkdir dir="${build.src}"/&
&mkdir dir="${build.dest}"/&
&mkdir dir="${buildwar.dest}"/&
&mkdir dir="${war.dest}"/&
&mkdir dir="${referenced.lib}"/&
&copy todir="${build.src}"&
&fileset dir="${src}"/&
&fileset dir="${resources}"/&
&copy todir="${buildwar.dest}"&
&fileset dir="${webapp}"/&
&!-- 因为当前我们项目中,各个子工程项目有互相引用的情况,打包成jar包就成问题了,所以直接将eclipse自动编译的.class文件打包成jar包,然后再进行混淆--&
&target name="references" depends="prepare" description="将引用到的子工程打包成jar文件"&
&jar destfile="${referenced.lib}/${childproject1.name}.jar"&
&fileset dir="${workspace}/${childproject1.name}/bin"/&
&jar destfile="${referenced.lib}/${childproject2.name}.jar"&
&fileset dir="${workspace}/${childproject2.name}/bin"/&
&target name="proguard" depends="references" description="混淆引用到的子工程jar文件,并替换"&
&taskdef resource="proguard/ant/task.properties" classpath="${proguard.lib}/proguard.jar" /&
&proguard configuration="${proguard}/proguard.pro"&
&injar file="${referenced.lib}/${childproject1.name}.jar"/&
&outjar file="${referenced.lib}/OB_${childproject1.name}.jar"/&
&injar file="${referenced.lib}/${childproject2.name}.jar"/&
&outjar file="${referenced.lib}/OB_${childproject2.name}.jar"/&
&libraryjar dir="${lib}"/&
&/proguard&
&move file="${referenced.lib}/OB_${childproject1.name}.jar" tofile="${referenced.lib}/${childproject1.name}.jar"/&
&move file="${referenced.lib}/OB_${childproject2.name}.jar" tofile="${referenced.lib}/${childproject2.name}.jar"/&
&target name="build" depends="proguard" description="编译java文件,拷贝properties属性配置文件到编译后的路径下"&
&javac srcdir="${build.src}" destdir="${build.dest}"&
&classpath refid="classpath"/&
&copy todir="${build.dest}"&
&fileset dir="${build.src}"&
&include name="**/*.properties"/&
&include name="**/server.keystore"/&
&include name="**/*.xml"/&
&/fileset&
&target name="dist" depends="build" description="打war包,不将java文件打入包内"&
&delete dir="${build.src}"/&
&war warfile="${war.dest}/${server.name}.war" webxml="${buildwar.dest}/WEB-INF/web.xml"&
&lib dir="${referenced.lib}/"/&
&classes dir="${build.dest}"/&
&fileset dir="${buildwar.dest}"/&
&antcall target="clean"&&/antcall&
&target name="clean" depends="init" description="清除打包用临时文件"&
&delete dir="${build.src}"/&
&delete dir="${basedir}/build/WEB-INF"/&
&delete dir="${buildwar.dest}"/&
&target name="cleanAll" depends="clean" description="清除所有打包生成文件"&
&delete dir="${war.dest}"/&
&delete dir="${referenced.lib}"/&
&/project&
Jimmy.Duan
浏览: 59021 次
来自: 北京
org.springframework.beans.facto ...
不错,挺清晰的

我要回帖

更多关于 联想diss三星广告 的文章

 

随机推荐