當前位置:首頁 » 安卓系統 » android混淆文件

android混淆文件

發布時間: 2022-12-21 22:14:56

① android studio的混淆文件是哪個

關於代碼混淆的作用,就不多解釋了,整個過程大致如下:在app下的build.gradle文件中添加如下代碼(minifyEnabled表示是否混淆,默認是false,這里要記得設置成true):其中proguard-Android.txt文件是本地sdk/tools/proguard文件夾下的默認文件;prguard-rules.pro文件就是用來編寫混淆代碼的;接下來就是在prguard-rules.pro文件中編寫混淆代碼:關於其中代碼的理解,可以參考這篇文章:代碼混淆詳解編寫完混淆代碼,混淆也就算完成了,接下來就是打包了,但是,混淆的時候可能會遇到各種問題,主要是混淆代碼,因為涉及到有的類不需要混淆,混淆了就會報錯運行不了,所以在編寫混淆代碼的時候一定要小心,其實一般注意這幾點就好了:不需要導入第三方類庫的代碼,如上圖注釋的部分:-libraryjarslibs/BaiLBS_Android.jar等,按照網上說的,需要在混淆文件中導入第三方類庫,防止混淆時讀取包內容出錯,但是如果那樣做的話

② android mk文件怎麼加混淆

針對android 選擇user版本進行編譯的時候,會出現proguard錯誤,我們需要知道的事情

1.proguard是做什麼的,他的作用是將java代碼進行混淆的工具

2.因為proguard是混淆工具,所以android的mk文件也對其支持為兩種方式:

1.指定不需要混淆的native方法與變數的proguard.flags文件
如:LOCAL_PROGUARD_FLAG_FILES := proguard.flags

2.制定編譯的工程,不要使用代碼混淆的工具進行代碼混淆
如:LOCAL_PROGUARD_ENABLED := disabled
3.不設置,默認使用LOCAL_PROGUARD_ENABLED := full.即將該工程代碼全部混淆

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在Android項目中用到JNI,當用了proguard後,發現native方法找不到很多變數,原來是被proard優化掉了。所以,在JNI應用中該慎用progurad啊。

解決辦法:
1、在Android.mk中加入一行:
LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
2、創建proguard.flag文件,裡面寫入不需要proguard優化的類和方法。例如:

-keep class oms.miracle.mobiletv.broadcast.ServiceContext {
*;
}

我的這個類是和JNI相關的,不想讓proguard去優化而引起錯誤,向上面寫就能實現。

----------下面是網上找到的一些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和目錄所需要的程序庫文件

- 指定不去忽略非公共的庫類。

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

保留選項
-keep {Modifier} {class_specification} 保護指定的類文件和類的成員

-keepclassmembers {modifier} {class_specification} 保護指定類的成員,如果此類受到保護他們會保護的更好

-keepclasseswithmembers {class_specification} 保護指定的類和類的成員,但條件是所有指定的類和類成員是要存在。

-keepnames {class_specification} 保護指定的類和類的成員的名稱(如果他們不會壓縮步驟中刪除)

-keepclassmembernames {class_specification} 保護指定的類的成員的名稱(如果他們不會壓縮步驟中刪除)

-keepclasseswithmembernames {class_specification} 保護指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之後)

-printseeds {filename} 列出類和類的成員-keep選項的清單,標准輸出到給定的文件

③ Android第三方類庫中的jar包不被混淆

假如你的項目中有這樣一個image類庫, 打開image類庫下的build.gradle文件,查看裡面有哪些 引用包 ,如果lib裡面也有包, lib中的也需要查看

假如現在,讓 最後一個" compile'com.blankj:utilcode:1.9.8 '" 不被混淆

打開圖中的 External Libraries 文件, 我們導入的所有的第三方jar包都在裡面
找到" compile'com.blankj:utilcode:1.9.8 '"

查看包名,在混淆文件中添加

所有的jar包都依次寫上 -keep class "jar包名" ,就ok了
--注意事項--
1.保證實體類不被混淆
2.保證第三方的jar包不被混淆,類似於,友盟,地圖,等等,配置的時候,就把混淆文件也過來,免得再回去找
3.添加基礎混淆配置,網上有很多的實例

################ 以下直接到 proguard-rules.pro文件中,實體類,第三方部分,需修改####################

④ android 混淆 什麼意思

Android代碼混淆,是為了你的apk被他人反編譯之後拿到源碼,如果你混淆了,那反編譯後的apk所有的java類都被改成了a.java/c.java之類的文件名,類裡面的屬性也變成abc之類的了,想拿到你的源碼就不可能了,直接在gradle(app)文件的android節點下加上下邊代碼。

buildTypes{
release{
minifyEnabledfalse
('proguard-android.txt'),'proguard-rules.pro'
}
}

⑤ Android 混淆壓縮開啟以及自定義混淆規則

1. -keep[,修飾符,...] class_specification,keep混淆命令的模板,修飾符可以暫時不管,因為[]表示可選的;class_specification是對類以及類成員的描述,看下圖

2. -keep命令基本用法: 指定某個包,類,方法,變數和屬性不混淆

3.自定義混淆字典:替換默認的混淆字典,

4.保持源碼的行號、源文件信息不被混淆 方便在崩潰日誌中查看

⑥ android 混淆

其實不要混淆的主旨就在於混淆會改變方法的名字,類的名字,但是對於外部的一些引用是通過名字找到對應的方法,類,這些可能是通過string找到方法,類,但是string里的欄位是不會進行混淆,所以還是會保留原來的名字,這樣混淆過後通過原來的名字去找混淆後的名字,是肯定找不到,所以就會報出nosuchfileException,(對於gson,反射,jsbridge,第三方庫都是這個原因),至於說枚舉類型,我還暫時沒懂 為什麼,還望共同學習,一起成長。
文章是讀了兩篇博客寫出來,也是自己總結,消化成自己的知識了,若有什麼錯誤的地方,還望指出,相信讀了這兩篇文章之後你也會懂混淆,一個是如何混淆,一個是哪些該混淆,為什麼不能混淆

-keepclasseswithmembernames class * { # 保持native方法不被混淆 native <methods>; }

-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆 public static final Android.os.Parcelable$Creator *; }

發布一款應用除了設minifyEnabled為ture,你也應該設置zipAlignEnabled為true,像Google Play強制要求開發者上傳的應用必須是經過zipAlign的,zipAlign可以讓安裝包中的資源按4位元組對齊,這樣可以減少應用在運行時的內存消耗。

原文: http://droidyue.com/blog/2016/07/10/understanding-android-obfuscated-code-by-proguard/

其實不要混淆的主旨就在於混淆會改變方法的名字,類的名字,但是對於外部的一些引用是通過名字找到對應的方法,類,這些可能是通過string找到方法,類,但是string里的欄位是不會進行混淆,所以還是會保留原來的名字,這樣混淆過後通過原來的名字去找混淆後的名字,是肯定找不到,所以就會報出nosuchfileException,(對於gson,反射,jsbridge,第三方庫都是這個原因),至於說枚舉類型,我還暫時沒懂 為什麼,還望共同學習,一起成長。
文章是讀了兩篇博客寫出來,也是自己總結,消化成自己的知識了,若有什麼錯誤的地方,還望指出,相信讀了這兩篇文章之後你也會懂混淆,一個是如何混淆,一個是哪些該混淆,為什麼不能混淆

⑦ android源碼被混淆了怎麼還原

android源碼被混淆了還原方法為:
1、得到 classes.dex文件;直接用機器上的解壓軟體 打開 .apk 文件,解壓出 classes.dex 文件。
2、還原.jar文件;這一步需要用到一個工具 dex2jar (谷歌的代碼庫里有http://code.google.com/p/dex2jar/)下載完了,解壓,然後把第一步的 產物(即那個classes.dex文件)放到 dex2jar的解壓目錄(解壓目錄里 有 dex2jar.bat 文件,檢查一下,沒有的話說明目錄不對)。
3、查看.jar文件;這一步就是傳統的 反編譯 了,需要工具輔助,這里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui)下載系統對應的版本,解壓,(xp系統)會看到一個 .exe文件,沒錯就是 單文件綠色版,雙擊,選擇 第二步 生成的 .jar,即可。

⑧ android項目對apk進行混淆

    混淆apk是一個很基礎的工作,博客上也有一堆介紹,本文提供一下這類工作的解決思路。在安卓源碼下面和android studio裡面的做法差異不大,本文以android源碼舉例。
    首先在對應mk文件裡面添加proguard enabled的語句,系統有一個自帶的build/core/proguard.flags,默認是使用這個文件,而且一般項目默認是關閉的,這也是有原因的。因為這里的proguard.flags是沒有針對app的配置的,使用默認的混淆,app很有可能就不工作了。

    添加了mk文件修改之後,在Android.mk同級根目錄創建本app自有的proguard.flags。新增內容如下,這里需要注意,網上很多demo,基本分為三部分,一部是保留app基礎功能部分的內容不混淆;2是保持app對外介面,例如get、set、isxx、AIDL、public、native層的介面或者類;3.是第三方jar包或介面。混淆的基本原理就是將上訴類或介面進行統一簡單字母的替換,如果改變了這些對外介面的名字,很有可能被別人使用的時候就找不到對應哦介面

    一些第三方的庫如何不進行混淆,這個根據項目特點,可以自行搜索,比如網路的地圖包什麼的。
    然後是如何驗證和解決混淆過程遇到的問題,因為是對介面名進行替換,如果出現混淆問題的話,log裡面一定會有類似

這個時候只需要對相關介面進行例外(-keep)即可,然後用android-studio,直接打開或者dex2jar進行反解可以看到相關的介面是否被簡單替換。

⑨ 寫給Android 混淆小白的快速混淆方法

簡單來說,Android 進行ProGuard,可以起到壓縮,混淆,預檢,優化的功能,雖然不能說更安全但還是一個不容忽視的環節。

首先在build.gradle 中將混淆的開關打開,即 minifyEnabled 置為 true

然後就要去proguard-rules.pro寫入我們的混淆的規則(如文件其名),防止重要的類被混淆移除了。

省事第一步,先套個模板,就是找到網上博客上別人分享好的模板,像四大組件,主流開源庫,JNI調用本地方法,R資源等的混淆規則都一般有了,注意一點就是套模板,也要套個時間比較近的,沒有翻車的模板,可以能比較節省自己的時間,畢竟這么多行不一定能快速看出來,打個包出來才發現有問題就尷尬啦。

一般來說,用了混淆的模板後,我們還會有很多項目專屬的需要混淆的部分,例如我們的自定義View,Json解析的實體類,反射用到的類,還有我們依賴的非主流的開源框架,SDK等等。
對於自定義View,很多的模板都會將繼承與View的類用keep指令防止被混淆。有個偷懶的方法就是把自定義View 放入同一個包,再把這個包的類都寫入混淆規則,就可以搞定了。
對於Json解析的實體類,反射用到的類都是同理可得,找到那些不能被移除的,把它們寫入自己的混淆規則裡面。

所以如果在做項目時,有提前想到要給項目做混淆的,在導入依賴時就順手把對應混淆規則寫了,那事後就快活似神仙了。

首先,先判斷下它是否內置了混淆規則。如果不聲明它的混淆規則也正常運行,說明已經它帶了混淆。

但是生活往往不會一帆風順,一般來說會有各種報錯,所以還是需要對它聲明混淆。

最簡單的辦法就是找到依賴的這個包,就這個包的類都寫入混淆規則。例如:

項目里導入了一個非主流的開源庫,然後我需要對它寫入混淆規則,確保它能正常工作。

這時候不可以認為直接去使用它的地方,將有關它 import的類 keep class 就可以。

因為可能它內部還會使用包內其他類,所以最好仔細排查,最簡(tou)單(lan)就是把這個包的類都 用 keep 指令,防止它們被混淆。如下所示:

一般來說就可以防止這個開源庫里的類被混淆了。

例如

先使用 -libraryjars 命令 ,對導入的jar包和 so 文件進行聲明保留它們。

如果依舊出錯,嘗試去External library文件夾 或者使用 這個SDK的地方 找到這個 SDK的包找到,並把這個包里的類 都用 keep 指令保持不被移除。如:

根據包名,寫入混淆規則

一般來說,這樣就可以避免這個SDK的類被混淆啦

好了,最後附上一份自己做的項目的混淆規則(偽模板)

熱點內容
linuxcp腳本 發布:2025-04-02 15:28:38 瀏覽:968
部隊微視頻腳本 發布:2025-04-02 15:20:36 瀏覽:918
路由器的WAN口怎麼配置Vlan 發布:2025-04-02 15:16:13 瀏覽:942
海龜編譯日期 發布:2025-04-02 15:11:08 瀏覽:930
2021大眾polo炫彩有什麼配置 發布:2025-04-02 14:53:52 瀏覽:858
php數組長度排序 發布:2025-04-02 14:48:45 瀏覽:465
朗逸換壓縮機 發布:2025-04-02 14:42:25 瀏覽:415
片源網源碼 發布:2025-04-02 14:40:36 瀏覽:663
pythonlist查找元素 發布:2025-04-02 14:31:08 瀏覽:152
java漢諾塔遞歸演算法 發布:2025-04-02 06:28:40 瀏覽:127