當前位置:成語大全網 - 書法字典 - eclipse proguard如何混淆jar包

eclipse proguard如何混淆jar包

android應用程序的混亂包裝

1.將以下proguard.config=proguard.cfg添加到項目文件project.properties中,如下所示:

target=android-8

proguard.config=proguard.cfg

Eclipse將通過這個配置在項目目錄中生成proguard.cfg文件。

2.生成密鑰庫(如果可用,可以直接使用)

根據目錄下d:\ program files \ Java \ JDK 1 . 6 . 0 _ 07 \ bin >中的以下命令行,輸入keytool-genkey-alias Android。keystore-keyalg RSA-validity 100000-keystore Android。密鑰庫。

參數意義:-有效期主要是證書的有效期,寫成100000天;空格和退格鍵都是密碼。

命令將在d:\ program files \ Java \ JDK 1 . 6 . 0 _ 07 \ bin >目錄下生成android.keystore文件。

3.Eclipce中的操作

文件-& gt;導出->;導出Android應用程序-& gt;選擇項目-& gt;使用現有的密鑰庫,並輸入密碼-& gt;選擇目標APK文件

混淆源代碼後,原來的類名和方法名會類似於a,B,c,B,c。。混淆的原理其實就是類名和方法名的映射。

普羅瓜德,妳自己拿壹個就好。

-

進步原則

Java代碼被編譯成二進制類文件,該文件

文件也可以反編譯成源代碼,源代碼除了註釋基本都能看到。防止重要代碼

要泄露,我們經常需要混淆(混淆代碼,就是把方法、字段、包、類放到java裏。

把元素的名字改成了沒有意義的名字,這樣代碼結構沒變,可以運行,但是很難理解代碼的架構。proguard

就是這樣壹個混淆工具,它可以分析壹組類的結構,根據用戶的配置,然後用java把這些類文件混淆起來。

元素名稱混亂。在分析類的同時,他還有另外兩個功能:刪除無效代碼(收縮)和優化代碼。

(優化選項).

默認情況下,proguard

會把所有的代碼搞混,但是在以下情況下不能更改java元素的名稱,否則會導致程序錯誤。

第壹,我們使用反射。

第二,

我們的代碼依賴於系統的接口,比如系統代碼調用的回調方法,這是最復雜的情況。

第三,是我們的java。

元素名稱在配置文件中配置。

所以在使用proguard的時候,我們需要有壹個配置文件來告訴proguard。

這些java元素不能混淆。

Proguard配置

最常用的配置選項

-dontwarn默認程序

會檢查每個引用是否正確,但是第三方庫中往往有壹些類不會用到,沒有正確的引用。如果沒有配置,系統將報告錯誤。

由-keep指定的類和類成員作為條目保留。

-保留類成員

指定的類成員是保留的。

-keepclassewithmembers

如果指定的類成員存在,則保留指定的類和類成員。

Proguard問題和風險

代碼混淆雖然有混淆優化的優點,但也經常帶來以下問題。

1,混淆錯誤。使用第三方庫的時候,壹定要告訴proguard。

不要檢查,否則proguard將報告壹個錯誤。

2、運行錯誤,當代碼

在不能混淆的時候,壹定要正確配置,否則程序會運行錯誤,這是最有問題的情況。

3、調試痛苦,錯誤,錯誤棧是混淆代碼。

我自己也不明白。

為了防止混淆,妳需要熟悉妳所有的代碼和系統架構。

,以及系統和妳的代碼之間的集成接口,仔細分析。同時,妳必須需要壹個全面的測試。所以迷茫還是有風險的。

為了規避風險,只能混淆壹些關鍵代碼,但是妳混淆的效果也會降低。

不能混淆的普通androidCode代碼。

安卓程序

下面這段代碼,混亂的時候要保留。

Android系統組件,系統組件有固定的方法被系統調用。

按Android資源

文件引用的。名稱是固定的,不能混淆,如自定義視圖。

安卓Parcelable,需要用安卓。

連載。

其他官方建議

不混亂,如

Android . app . backup . backupagenthelper

安卓.偏好.偏好

com . Android . vending . licensing . ilicensingservice

Java序列化方法,系統序列化需要壹個固定的方法。

枚舉,系統需要壹個固定的方法來處理枚舉。

本地方法,不能修改本地方法名。

註釋註釋

數據庫驅動程序

壹些資源文件

使用反射的地方。

如何實施

現在的系統已經配置好了,困惑的時候保留。

Android系統組件

自定義視圖

Android Parcelable

Android R文件

Android Parcelable

列舉

每個開發人員都必須檢查他的代碼中是否使用了反射。

,以及其他不能混淆的地方。告訴我修改配置文件(已經保留的是不必要的)

目前系統部檢查的第三方庫有

-唐恩

android.support.**

-唐恩

com.tencent.**

-唐恩

org.dom4j.**

-唐恩

org.slf4j.**

-唐恩

org.mons.logging.**

-唐恩

org . Apache . commons . codec . binary . * *

-唐恩

微博4安卓。**

Proguard參數

-包括{文件名}

從給定文件中讀取配置參數。

-basedirectory {directoryname}

指定基目錄作為將來的相對文件名。

-injars {class_path}

指定要處理的應用程序jar、war、ear和目錄。

-outjars {class_path}

指定處理後要輸出的jar、war、ear和目錄的名稱。

-libraryjars {classpath}

指定要處理的應用程序jar、war、ear和目錄所需的庫文件。

-dontskipnoppubliclibraryclasses

指定不忽略非公共庫類。

-dontskipnoppubliclibraryclassmembers

指定不忽略對包可見的庫類成員。

保留選項

-保持{修飾符} {class_specification}

保護指定的類文件和該類的成員。

-keepclassmembers {modifier}

{class_specification}

保護指定類的成員,如果這個類被保護,他們會得到更好的保護。

-keepclassewithmembers

{class_specification}

保護指定的類和類成員,前提是所有指定的類和類成員都存在。

-keep names { class _ specification }

如果在壓縮步驟中未刪除指定的類和類成員,則保護它們的名稱。

-keepclassmembernames

{class_specification}

如果在壓縮步驟中未刪除指定類成員的名稱,則保護這些名稱。

-keepclasseswithmembernames

{class_specification}

如果所有指定的類成員都存在,則保護指定的類和類成員的名稱(在壓縮步驟之後)

-打印種子{文件名}

列出類和類的成員-保留選項的列表,標準輸出到給定的文件。

壓縮

-唐斯林克

不要壓縮輸入類文件。

-打印用法

{文件名}

-為什麽保持{class_specification}

使最優化

-不要優化

不要優化輸入類文件。

-假設副作用

{class_specification}

優化假設指定的方法沒有任何副作用。

-允許訪問修改

優化允許使用類的修飾符和成員來訪問和修改類。

模糊的

-東托弗斯特

不要混淆輸入類文件。

-打印映射

{文件名}

-應用映射{文件名}

重用映射增加了混亂

-模糊字典{文件名}

使用給定文件中的關鍵字作為要混淆的方法的名稱。

-過度侵略性

混淆時使用介入式重載。

-useuniqueclassmembernames

確定統壹混淆類的成員名稱以增加混淆。

-flattenpackagehierarchy { package _ name }

重新打包所有重命名的包,並將它們放入給定的單個包中。

-重新打包類{package_name}

將所有重命名的類文件重新打包到壹個給定的包中。

-dontusemixedcaseclassnames

混淆不會產生各種各樣的類名。

-keep attributes {屬性名稱,...}

保護給定的可選屬性,如LineNumberTable,

LocalVariableTable,源文件,已棄用,合成,簽名,

和內部類。

-renamesourcefileattribute { string }

設置源文件中給定的字符串常量。

解決出口包裝的錯誤

此時,導出提示“轉換為Dalvik”

格式化失敗,出現錯誤

1”錯誤,網上有很多種說法,最後我把proguard從4.4升級到4.8解決了。官方地址是/question。...

單壹類型參數.

另外,我又用了JsonObject,提交的對象中的成員實際上被改成了a,所以上面給的東西還不夠,還需要添加。

#使用您自己的拼接JsonObject

-保留類com.google.gson.JsonObject

{ *;}

個人建議減少這些依賴包混淆帶來的麻煩,幹脆全部保持不混淆。例如

-保留類com . bad logic . * * { *;

}

-保留類別*工具

com.badlogic.gdx.utils.Json*

-keep class com . Google . * * { *;

}

使用libgdx所需的配置

reference/p/libgdx-users/wiki/Ant

驗證包裝效果

使用apktool的反編譯工具,我解壓了包文件,看了壹下。如果包路徑、類名、變量名、方法名的變化和妳的預期壹致,那就OK了。命令:

apktool.bat d xxx.apk

德斯迪爾

配置實例

-因紮爾

androidtest.jarjar包的地址。

-outjars

Out輸出地址

-圖書館罐子

' d:\ Android-SDK-windows \ platforms \ Android-9 \ Android . jar '

被引用庫的jar,用於解析injars指定的jar類。

-優化過程

-dontusemixedcaseclassnames

混淆不會產生各種各樣的類名。

-dontskipnoppubliclibraryclasses

指定不忽略非公共庫類。

-不要預驗證

無預檢

-冗長

-優化

!代碼/簡化/算術,!field/*,!類別/合並/*

使最優化

-保留公共類*擴展

Android.app.Activity不混淆不變。

-保留公共類*擴展

android.app .應用

-保留公共類*擴展

android.app.Service

-保留公共類*擴展

安卓.內容.廣播接收器

-保留公共類*擴展

安卓.內容.內容提供商

-保留公共類*擴展

Android . app . backup . backupagenthelper

-保留公共類*擴展

安卓.偏好.偏好

-保持公開課

com . Android . vending . licensing . ilicensingservice

-保持公共抽象接口

com.asqw.android.Listener{

公共保護;

所有的方法都不會混淆。

}

-保持公開課

com.asqw.android{

public void Start(Java . lang . string);

這個方法不混亂。

}

-keep classes with membernames class * {

如果所有指定的類成員都存在,則保護指定的類和類成員的名稱(在壓縮步驟之後)

原生;

}

-keepclasseswithmembers class * {

保護指定的類和類成員,前提是所有指定的類和類成員都存在。

public (android.content.Context,

Android . util . attributeset);

}

-keepclasseswithmembers class *

{

public (android.content.Context,

android.util.AttributeSet,int);

}

-keepclassmembers類*擴展

Android . app . activity {保護指定類的成員,如果這個類被保護,他們會得到更好的保護。

公共空間

*(Android . view . view);

}

-keepclassmembers枚舉*

{

公共靜態**[]

values();

公共靜態**

value of(Java . lang . string);

}

-保留類別*工具

Android . OS . parcelable {保護指定的類文件和類成員。

公共靜態最終

Android . OS . parcelable $ Creator *;

}

//不要混淆指定包下的類。

-繼續上課

com.aspire.**