編輯:關於Android編程
一.概述
1.Android Studio中做混淆,基本就是對Proguard-rules.pro文件的操作。混淆的過程也是有規律可循 2.寫出適合自己代碼的混淆規則 3.minifyEnabled主要用來控制是否運行混淆的 4.然後我們就可以到proguard-rules.pro文件中加入我們的混淆規則了。 5.代碼混淆(Obfuscated code)亦稱花指令,是將計算機程序的代碼,轉換成一種功能上等價,但是難於閱讀和理解的形式的行為。二.ProGuard作用
1 壓縮(Shrinking):默認開啟,用以減小應用體積,移除未被使用的類和成員,並且會在優化動作執行之後再次執行(因為優化後可能會再次暴露一些未被使用的類和成員)。 2.優化(Optimization):默認開啟,在字節碼級別執行優化,讓應用運行的更快。 3.混淆(Obfuscation):默認開啟,增大反編譯難度,類和類成員會被隨機命名,除非用keep保護。 4.混淆後默認會在工程目錄三.部分代碼避免混淆,設置混淆規則
1.一顆星表示只是保持該包下的類名,而子包下的類名還是會被混淆;兩顆星表示把本包和所含子包下的類名都保持;用以上方法保持類後,你會發現類名雖然未混淆,但裡面的具體方法和變量命名還是變了,這時如果既想保持類名,又想保持裡面的內容不被混淆,我們就需要以下方法了
2.在此基礎上,我們也可以使用Java的基本規則來保護特定類不被混淆,比如我們可以用extend,implement等這些Java規則。如下例子就避免所有繼承Activity的類被混淆
3.如果我們要保留一個類中的內部類不被混淆則需要用$符號,如下例子表示保持ScriptFragment內部類JavaScriptInterface中的所有public內容不被混淆。
4.如果我們要保留一個類中的內部類不被混淆則需要用$符號,如下例子表示保持ScriptFragment內部類JavaScriptInterface中的所有public內容不被混淆。
四.不能被混淆的注意事項
1.jni方法不可混淆,因為這個方法需要和native方法保持一致;2.反射用到的類不混淆(否則反射可能出現問題,可能會出現問題,如NoSuchFiledException或者NoSuchMethodException等,.) 因為反序列化創建對象本質還是利用反射,會根據json字符串的key作為屬性名稱,value則對應屬性值.
3.AndroidMainfest中的類不混淆,所以四大組件和Application的子類和Framework層下所有的類默認不會進行混淆。自定義的View默認也不會被混淆;所以像網上貼的很多排除自定義View,或四大組件被混淆的規則在Android Studio中是無需加入的;
4.與服務端交互時,使用GSON、fastjson等框架解析服務端數據時,所寫的JSON對象類不混淆,否則無法將JSON解析成對應的對象,實體類由於涉及到與服務端的交互,各種gson的交互如此等等,是要保留的。將你項目中實體類都拎出來, 如果你的實體類都在一個包下,那你就幸福了;
5.使用第三方開源庫或者引用其他第三方的SDK包時,如果有特別要求,也需要在混淆文件中加入對應的混淆規則,打開你的build.gradle文件,查看你用了哪些第三方的包,去他們的官網把已經寫好的混淆copy下來,一般官網都是有混淆的,沒有的話就google,也沒有的話自己按照上面的寫法自己寫,還不會的話。。。。。只能換個包。。。。。如果你是直接包含的jar包的話,你這樣寫。
6.有用到WebView的JS調用也需要保證寫的接口方法不混淆,原因和第一條一樣; 7.Parcelable的子類和Creator靜態成員變量不混淆,否則會產生Android.os.BadParcelableException異常;9.發布一款應用除了設minifyEnabled為ture,你也應該設置zipAlignEnabled為true,像Google Play強制要求開發者上傳的應用必須是經過zipAlign的,zipAlign可以讓安裝包中的資源按4字節對齊,這樣可以減少應用在運行時的內存消耗。
五.工具
1.但是也會導致我們收集到的崩潰的stacktrace變得更加難以讀懂。 ,retrace,用來將混淆後的stacktrace還原成混淆之前的信息。 2.路徑為./tools/proguard/bin/retrace.sh六.資源文件的混淆
資源文件的混淆,所以這塊內容還是等到一個相對穩定,並且重構完成後再來更新
Service 服務:四大組件之一特性: 沒有界面運行在後台,除了界面相關的之外,Activity能做的Service也能做。service的生命周期:上圖所述一共有兩種
Android 6.0(Marshmallow) API Level: 23Android 7.0(Nougat) API Level: 24雖然Android一直處於持
優步(UBER)-全球即時用車軟件,現已覆蓋全球68個國家,444個城市。Uber旨在為大家帶來更安全、更舒適的出行方式,為了保證雙方的安全和隱私,優步(U
Android Studio作為Google的親兒子,Nexus手機系列所收到的待遇大家有目共睹.Android5.0出來之後,Nexus5第一時間就升級到了最新的系統.