Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android Application的防反編譯Proguard和應用簽名

android Application的防反編譯Proguard和應用簽名

編輯:關於Android編程

android APK防止反編譯:

在android2.3之後的版本新建項目中會自動生成proguard.cfg和project.properties文件,proguard.cfg文件是混淆java代碼的配置文件,裡面對不需要混淆代碼的類文件進行配置過濾,project.properties文件裡設置android項目對應的版本和proguard.cfg的路徑。

1.貼上自動生成的proguard.cfg文件的內容:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-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 com.android.vending.licensing.ILicensingService


-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);
}


-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}


-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

<-----------系統默認proguard.cfg說明--------------------->


For some situations, the default configurations in the proguard.cfg file will suffice. However, many situations are hard for ProGuard to analyze correctly and it might remove code that it thinks is not used, but your application actually needs. Some examples include:

a class that is referenced only in the AndroidManifest.xml file(AndroidManifest.xml文件中的引用類)
a method called from JNI(JNI調用的方法)
dynamically referenced fields and methods(動態引用的字段和方法)
<-----------系統默認proguard.cfg說明--------------------->
從上面的配置代碼可以看出對Activity,Application,Service,BroadcastReceiver,ContentProvider,BackupAgentHelper,Preference,ILicensingService的子類不做代碼混淆處理(這些類可能被其他應用或系統應用調用)。混淆之後應用出現如ClassNotFoundException異常,可以在此文件中添加過濾混淆代碼:

-keep public class <MyClass>
 2.在project.properties文件:

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt


# Project target.
target=android-10

 
3.App簽名
簽名主要用到的是JDK中提供的簽名工具keytool(路徑:your jdk path/bin/keytool)

keytool生成key.keystore簽名文件的命令參數


Keytool Option  Description
-genkey  獲得密鑰對(私有密鑰和公共密鑰)
-v  啟用詳細輸出
-alias <alias_name>  別名
-keyalg <alg>  使用生成密鑰的加密算法
-keysize <size>  密鑰長度
-dname <name> 
創建密鑰的描述

-keypass <password> 
密鑰密碼

-validity <valdays> 
密鑰有效期

Note:推薦使用大於等於10000

-keystore <keystore-name>.keystore  輸出生成密鑰的.keystore文件保存路徑
-storepass <password> 
密鑰庫密碼,與-keypass對應

有了以上命令參數,下面執行命令進行應用簽名(以下為例):

keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
執行過程中有一些提示輸入信息,輸入完成後.keystore文件生成完畢。

4.導出混淆的簽名應用

右擊項目:Android Tools--------------------->Export sined application package

選擇上一步生成的簽名文件(.keystore)和輸入密鑰庫密碼,點擊下一步,選擇填寫Alias別名和密鑰密碼----->導出APK對應的路徑-------->finish

到處截屏以後貼上。

查看驗證APK簽名:同樣是JDK工具jarsigner

jarsigner -verify my_signed.apk
如果出現的是CN=Android Debug,說明是調試密鑰生成簽名的apk

這樣一個混淆代碼後的簽名APK制作完畢。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved