资源描述
. . . . .
Android代码混淆、签名打包apk
一、 代码混淆
代码混淆说简单的其实就是为了防止别人反编译你的源代码,因为JAVA程序比拟容易被反编译,所以如果程序中有一些比拟重要的逻辑的话,通过代码混淆来处理确实可以阻止一下被人反编译。
不过代码混淆还是不能阻止被反编译xml格式的布局文件,混淆的是JAVA文件。但是混淆后的代码如果经验多的话,可是可以分析出来的,但这是少数。
下面开始说说这个东西是如何使用的,有两种方式可以实现代码混淆,一种是直接在eclipse中,android 2.3开始支持这个功能。另一种是使用ant。
首先我们会在项目中看到proguard.cfg或者proguard-project.txt文件,只需将project.properties里的分注释拿掉即可,去掉#
注:有的项目下面会存在proguard-project.txt,这时你直接拿掉注释即可;自定义的时候,创建文件proguard.cfg文件,将系统自带的proguard-project.txt容复制进去。
配置proguard.cfg文件,
考前须知:1、添加外部引用的外部jar包;
2、保存外部jar里的类以与方法;〔由于有的jar已经混淆过,再次混淆会出错〕
3、涉与到网络请求json数据返回的,需要将实体类保存,不参与混淆,并且每个实体类都需序列化;〔和服务器端实体类对应,参与混淆将无法解析〕
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-ignorewarnings
-dontwarn
-dontobfuscate
-dontoptimize
-libraryjarslibs/android-support-v4.jar
-libraryjarslibs/Core.jar
-libraryjarslibs/yht.BASE64Decoder.jar
-dontskipnonpubliclibraryclassmembers
-dontskipnonpubliclibraryclasses
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-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 .android.vending.licensing.ILicensingService
-keep public class .broadtext.phreportfault.entity.**{*;}
-keep public class .broadtext.phreportfault.service.result.**{*;}
-keep class android.support.v4.**{*;}
-keep class .google.zxing.**{*;}
-keep class Decoder.BASE64Encoder.**{*;}
-keepattributes Signature
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembersenum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keep class * implements android.os.Serializable {
*;
}
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
二、 数字签名
所有的Android应用都必须有数字签名,没有不存在数字签名的应用,包括模拟器上运行的。Android系统不会安装没有数字证书的应用。
签名步骤:
右击项目,选择下列图中的1或者2
当已生成过密钥库,直接使用,无密钥库那么选择下的create new keystore
选择密钥,输入密码
完毕!
6 / 6
展开阅读全文