Android签名打包及代码混淆

代码混淆:

android apk文件实际也是一种特殊形式的压缩包,很容易就被人解包反编译。为了防止这种情况的发生,就有了代码混淆技术

eclipse里代码混淆文件是proguard.cfg文件。在android studio中是proguard-rules.pro

以下所有都是在as中讲解,eclipse大同小异

代码混淆通用部分:


#指定代码的压缩级别

-optimizationpasses 5


#包明不混合大小写

-dontusemixedcaseclassnames


#不去忽略非公共的库类

-dontskipnonpubliclibraryclasses


 #优化  不优化输入的类文件

-dontoptimize


 #预校验

-dontpreverify


 #混淆时是否记录日志

-verbose


 # 混淆时所采用的算法

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

#保护注解

-keepattributes *Annotation*

一般的代码混淆都会如上配置基本项


一下是根据个人项目配置:


# 保持哪些类不被混淆

-keep public class * extends android.app.Fragment

-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 com.android.vending.licensing.ILicensingService

#如果有引用v4包可以添加下面这行

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

#保持 Parcelable 不被混淆

-keep class * implements android.os.Parcelable {

  public static final android.os.Parcelable$Creator *;

}

 

#保持 Serializable 不被混淆

-keepnames class * implements java.io.Serializable

 

#保持 Serializable 不被混淆并且enum 类也不被混淆

-keepclassmembers class * implements java.io.Serializable {

    static final long serialVersionUID;

    private static final java.io.ObjectStreamField[] serialPersistentFields;

    !static !transient <fields>;

    !private <fields><span></span>;

    !private <methods>;

    private void writeObject(java.io.ObjectOutputStream);

    private void readObject(java.io.ObjectInputStream);

    java.lang.Object writeReplace();

    java.lang.Object readResolve();

}


#避免混淆泛型 如果混淆报错建议关掉

–keepattributes Signature(此处一般建议配置,在引用第三方库的时候,不这样配置会很容易报错)


如果引用第三方jar包:

 




















#避免gson库混淆


-keep class com.google.gson.examples.android.model.** { *; }

#避免okhttp混淆

keep class com.squareup.okhttp.**{*;}


混淆配置文件配置完成后就需要加载配置文件:

android studio:build.gradle文件

buildTypes {

        release {

            minifyEnabled true(此处要设置为true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

    }


eclipse:在project.properties文件里:

proguard.config=${sdk.dir}/tools/proguard/proguard-

android.txt:proguard-project.txt


混淆后会生成一个混淆后代码与源代码的映射关系文件,保存在mapping.txt

#混淆前后的映射


-printmapping mapping.txt(可以通过此文件查看对应关系)



版本名称和版本代号及签名文件:


版本名称和版本代号都在  manifest.xml文件中

版本名称是体现给用户的,版本代号是面向开发人员的

如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.wen_en.aweather"

    android:versionCode="10010"

    android:versionName=“1.10">


版本代号和版本名称的更新都是以递增的形式体现,具体递增规则随意



签名文件是在打包程序的时候使用的:

一般的签名(非系统签名):

选择项目 export    选择export android application

下一步

输入项目名称(默认即可)

下一步

选择已有的签名文件(keystore)或者新建keystore

下一步 

按照提示即可完成


系统签名:

将带签名文apk与系统签名文件放在同一文件夹内(系统签名文件需要在android源码环境下编译)

 

如:


前三个就是系统签名文件,后一个就是待签名apk

然后在dos界面定位到当前文件夹  输入:

java -jar signapk.jar platform.x509.pem platform.pk8 DemoKindgarder.apk Signapk.apk


Signup.apk为签名后的文件(名字自定义)

另外 如果需要签系统名  需要在manifest.xml  中添加

package="com.example.clientapptest"

    android:sharedUserId="android.uid.system"

    android:versionCode="37"

    android:versionName="3.7" >


android:sharedUserId=“android.uid.system"这一句代表此app为系统应用


apk文件的反编译及回编译:

我在实际项目中用的比较少,只在以前做汉化的时候用过  推荐参考

http://android.tgbus.com/Android/tutorial/201103/346338.shtml





另外 如果你需要查看你签名文件的sha1码:

在控制台输入命令。

cd .android

开发模式使用 debug.keystore,命令为:keytool -list -v -keystore debug.keystore

发布模式使用 apk 对应的 keystore,命令为:keytool -list -v -keystore apk的keystore


得到: 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值