android混淆配置
① 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 進行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的類被混淆啦
好了,最後附上一份自己做的項目的混淆規則(偽模板)
③ android 代碼混淆演算法有哪些
根據 SDK 的版本不同有 2 中不同的代碼混淆方式,以上的 proguard.cfg 參數詳解中所涉及到的信息是在較低版本 SDK 下的混淆腳本,事實上在高版本的 SDK 下混淆的原理和參數也與低版本的相差無幾,只是在不同 SDK 版本的環境下引入混淆腳本的方式有所不同。具體方法如下:
低版本 SDK 下,項目中同時包含 proguard.cfg 和 project.properties 文件,則只需在 project.properties 文件末尾添加 proguard.config=proguard.cfg 再將項目 Export 即可。
高版本 SDK 下,項目中同時包含 proguard-project.txt 和 project.properties 文件,這時需要在 proguard-project.txt 文件中進行如下信息的配置,然後再將項目 Export 即可。下面以真實的文件進行演示說明。
復制代碼
# 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
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-16
復制代碼
以上的配置信息即是 project.properties 文件中內容,藍色文字為我們在代碼混淆過程中需要添加的配置信息,其中:sdk.dir 為你在當前機器上 SDK 的安裝路徑。如果想保留某個包下的文件不被混淆,可以在 proguard-project.txt 文件中加入保留對應包名的語句即可。
復制代碼
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
-dontwarn com.cnki.android.cnkireader.**
-keep class com.cnki.android.cnkireader.** { *; }
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the javaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
復制代碼
④ 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對一般用途來說足夠了,但是也需要注意一些程序風格,增強proguard的效果。
1、 特定類的public函數不做實際的事情,只做簡單處理後調用private函數。proguard對會對一些特定類的public函數不做混淆,以便被AndroidManifest.xml和各種layout引用。
2、會被AndroidMinifest.xml和layout引用的類放在淺層的包中,需要隱藏的類放在較深處,以便proguard混淆包名帶來好處。如果一個包中有需要不混淆的內容,則整個包名都不會被混淆。
3、將函數根據功能分細切短也會有些益處。當然如果隱藏代碼的要求比較高,還是用native好了。
望採納!!
⑥ Android 開發怎樣做代碼加密或混淆
要在打包APK時加入混淆需要在Mole中的buid.gradle中加入如下信息:
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
minifyEnabled為runProguard的更名 去除無用代碼
shrinkResources 去除無用資源 ,要注意,這個功能的使用依賴於code shrinking, 所以minifyEnabled也必須打開。
proguard-rules.pro 為混淆規則文件,放置在Mole根目錄下。
配置完後你就可以在Android studio中 Build->Generate Signed APK... 生成代簽名和混淆的APK文件了。
⑦ android 工程中什麼是混淆代碼工具proguard的配置文件
proguard的配置文件如果是在4.3版本之後,新建工程之後,就會生成這個文件,裡面可以進行一些混淆的操作。