【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android入門知識(shí)點(diǎn)有哪些_第1頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android入門知識(shí)點(diǎn)有哪些_第2頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android入門知識(shí)點(diǎn)有哪些_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論