


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android入門知識(shí)點(diǎn)有哪些
本篇內(nèi)容介紹了“Android入門知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓在下帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!說(shuō)在前面這里我們直接用AndroidStudio來(lái)說(shuō)明如何進(jìn)行混淆,Android
Studio自身集成Java語(yǔ)言的ProGuard作為壓縮,優(yōu)化和混淆工具,配合Gradle構(gòu)建工具使用很簡(jiǎn)單,只需要在工程應(yīng)用目錄的gradle文件中設(shè)置minifyEnabled為true即可。然后我們就可以到文件中加入我們的混淆規(guī)則了。android
{
...
buildTypes
{
release
{
minifyEnabled
true
proguardFiles
getDefaultProguardFile('proguard-android.txt'),
''
}
}
}以上示例代碼表示對(duì)release版本就行混淆處理。下面我們先來(lái)簡(jiǎn)介下ProGuard的三大作用,并簡(jiǎn)要說(shuō)明下它們常用的命令。ProGuard作用壓縮(Shrinking):默認(rèn)開啟,用以減小應(yīng)用體積,移除未被使用的類和成員,并且會(huì)在優(yōu)化動(dòng)作執(zhí)行之后再次執(zhí)行(因?yàn)閮?yōu)化后可能會(huì)再次暴露一些未被使用的類和成員)。-dontshrink
關(guān)閉壓縮優(yōu)化(Optimization):默認(rèn)開啟,在字節(jié)碼級(jí)別執(zhí)行優(yōu)化,讓應(yīng)用運(yùn)行的更快。-dontoptimize
關(guān)閉優(yōu)化
-optimizationpasses
n
表示proguard對(duì)代碼進(jìn)行迭代優(yōu)化的次數(shù),Android一般為5混淆(Obfuscation):默認(rèn)開啟,增大反編譯難度,類和類成員會(huì)被隨機(jī)命名,除非用keep保護(hù)。-dontobfuscate
關(guān)閉混淆混淆后默認(rèn)會(huì)在工程目錄app/build/outputs/mapping/release下生成一個(gè)mapping.txt文件,這就是混淆規(guī)則,我們可以根據(jù)這個(gè)文件把混淆后的代碼反推回源本的代碼,所以這個(gè)文件很重要,注意保護(hù)好。原則上,代碼混淆后越亂越無(wú)規(guī)律越好,但有些地方我們是要避免混淆的,否則程序運(yùn)行就會(huì)出錯(cuò),所以就有了下面我們要教大家的,如何讓自己的部分代碼避免混淆從而防止出錯(cuò)?;疽?guī)則先看如下兩個(gè)比較常用的命令,很多童鞋可能會(huì)比較迷惑以下兩者的區(qū)別。-keep
class
cn.hadcn.test.**
-keep
class
cn.hadcn.test.*一顆星表示只是保持該包下的類名,而子包下的類名還是會(huì)被混淆;兩顆星表示把本包和所含子包下的類名都保持;用以上方法保持類后,你會(huì)發(fā)現(xiàn)類名雖然未混淆,但里面的具體方法和變量命名還是變了,這時(shí)如果既想保持類名,又想保持里面的內(nèi)容不被混淆,我們就需要以下方法了-keep
class
cn.hadcn.test.*
{*;}在此基礎(chǔ)上,我們也可以使用Java的基本規(guī)則來(lái)保護(hù)特定類不被混淆,比如我們可以用extend,implement等這些Java規(guī)則。如下例子就避免所有繼承Activity的類被混淆-keep
public
class
*
extends
android.app.Activity如果我們要保留一個(gè)類中的內(nèi)部類不被混淆則需要用$符號(hào),如下例子表示保持ScriptFragment內(nèi)部類JavaScriptInterface中的所有public內(nèi)容不被混淆。-keepclassmembers
class
cc.ninty.chat.ui.fragment.ScriptFragment$JavaScriptInterface
{
public
*;
}再者,如果一個(gè)類中你不希望保持全部?jī)?nèi)容不被混淆,而只是希望保護(hù)類下的特定內(nèi)容,就可以使用<init>;
//匹配所有構(gòu)造器
<fields>;
//匹配所有域
<methods>;
//匹配所有方法方法你還可以在<fields>或<methods>前面加上private
、public、native等來(lái)進(jìn)一步指定不被混淆的內(nèi)容,如-keep
class
cn.hadcn.test.One
{
public
<methods>;
}表示One類下的所有public方法都不會(huì)被混淆,當(dāng)然你還可以加入?yún)?shù),比如以下表示用JSONObject作為入?yún)⒌臉?gòu)造函數(shù)不會(huì)被混淆-keep
class
cn.hadcn.test.One
{
public
<init>(org.json.JSONObject);
}有時(shí)候你是不是還想著,我不需要保持類名,我只需要把該類下的特定方法保持不被混淆就好,那你就不能用keep方法了,keep方法會(huì)保持類名,而需要用keepclassmembers
,如此類名就不會(huì)被保持,為了便于對(duì)這些規(guī)則進(jìn)行理解,官網(wǎng)給出了以下表格移除是指在壓縮(Shrinking)時(shí)是否會(huì)被刪除。以上內(nèi)容時(shí)混淆規(guī)則中需要重點(diǎn)掌握的,了解后,基本所有的混淆規(guī)則文件你應(yīng)該都能看懂了。再配合以下幾點(diǎn)注意事項(xiàng),注意事項(xiàng)1,jni方法不可混淆,因?yàn)檫@個(gè)方法需要和native方法保持一致;-keepclasseswithmembernames
class
*
{
#
保持native方法不被混淆
native
<methods>;
}2,反射用到的類不混淆(否則反射可能出現(xiàn)問(wèn)題);3,AndroidMainfest中的類不混淆,所以四大組件和Application的子類和Framework層下所有的類默認(rèn)不會(huì)進(jìn)行混淆。自定義的View默認(rèn)也不會(huì)被混淆;所以像網(wǎng)上貼的很多排除自定義View,或四大組件被混淆的規(guī)則在Android
Studio中是無(wú)需加入的;4,與服務(wù)端交互時(shí),使用GSON、fastjson等框架解析服務(wù)端數(shù)據(jù)時(shí),所寫的JSON對(duì)象類不混淆,否則無(wú)法將JSON解析成對(duì)應(yīng)的對(duì)象;5,使用第三方開源庫(kù)或者引用其他第三方的SDK包時(shí),如果有特別要求,也需要在混淆文件中加入對(duì)應(yīng)的混淆規(guī)則;6,有用到WebView的JS調(diào)用也需要保證寫的接口方法不混淆,原因和***條一樣;7,Parcelable的子類和Creator靜態(tài)成員變量不混淆,否則會(huì)產(chǎn)生Android.os.BadParcelableException異常;-keep
class
*
implements
Android.os.Parcelable
{
#
保持Parcelable不被混淆
public
static
final
Android.os.Parcelable$Creator
*;
}8,使用enum類型時(shí)需要注意避免
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《人體解剖與組織胚胎學(xué)》課程標(biāo)準(zhǔn)
- 加工行業(yè)合同范本
- 買買廢鐵合同范本
- 個(gè)人轉(zhuǎn)正述職報(bào)告
- 個(gè)人研修培訓(xùn)的心得體會(huì)
- 個(gè)人工作總結(jié)煤質(zhì)工作總結(jié)
- 個(gè)人代辦委托書
- 廚房耗材合同范本
- 業(yè)務(wù)合作協(xié)議書
- 烹飪?cè)现R(shí)題庫(kù)
- GB/T 3452.2-2007液壓氣動(dòng)用O形橡膠密封圈第2部分:外觀質(zhì)量檢驗(yàn)規(guī)范
- GB/T 30797-2014食品用洗滌劑試驗(yàn)方法總砷的測(cè)定
- GB/T 20057-2012滾動(dòng)軸承圓柱滾子軸承平擋圈和套圈無(wú)擋邊端倒角尺寸
- GB/T 19808-2005塑料管材和管件公稱外徑大于或等于90mm的聚乙烯電熔組件的拉伸剝離試驗(yàn)
- 班組建設(shè)工作體系課件
- 第章交通調(diào)查與數(shù)據(jù)分析課件
- 中醫(yī)院情志養(yǎng)生共64張課件
- 秘書理論與實(shí)務(wù)教案
- 社區(qū)矯正人員工作手冊(cè)
- 淺圓倉(cāng)滑模及倉(cāng)頂板施工方案
- 應(yīng)用文第一章緒論2016春
評(píng)論
0/150
提交評(píng)論