? 聲明 :所有技術(shù)截取自?T -mvp,感謝作者以及群友的支持。
? 廢話不多說,上個(gè)圖,顯示當(dāng)前解決辦法簡單便捷性
? 框架搭成后,通過Permission這個(gè)注解,來標(biāo)注一些涉及權(quán)限的方法。注解的Value里要明確指出該方法中所涉及的權(quán)限。實(shí)際執(zhí)行時(shí),通過彈窗提示,獲得權(quán)限。
? 本次重點(diǎn)不為貼代碼。代碼請參看github.項(xiàng)目創(chuàng)建 構(gòu)建的所有使用流程,都在代碼中做了標(biāo)注。具體如圖
? 下面,簡單的介紹一下,使用原理(大神可忽略這一段,我盡量用白話文說,加入自己的理解) Android 6.0的權(quán)限問題,大概流程,為 獲得權(quán)限,然后執(zhí)行相關(guān)權(quán)限操作。并且,簡單說,獲得權(quán)限的過程基本都一樣,不一樣的地方,也就是權(quán)限的名稱了。這也是注解為什么加入Value的原因。AspectJ的做用,就是在編譯期間,將代碼織入進(jìn)去(就是不用你寫)下面看一下有關(guān)AspectJ的代碼邏輯
這里的代碼,基本為Android代碼,只是一些必要的注解 @Aspect 與Aroud 為AspecJ中,這里實(shí)現(xiàn)的代碼的織入的過程。或許有點(diǎn)難理解,我拿一個(gè)更簡單的例子來說,
這里onLog原方法,只有一條log輸出語句,通過AspectJ Aroud,代碼替換,在原方法前面與后面加入兩句Log,簡單粗暴改變源碼。這樣理解是不是好一點(diǎn)?
以上,基本為所有內(nèi)容。沒有特別做一些深入的原理解釋,代碼里重點(diǎn)引導(dǎo)使用過程。想要更深入的理解,也請恕我無能為力。在此僅僅為大家提供一種方法解決問題。
ps:這次截取,經(jīng)過作者同意,感謝作者North_2016,附上T-mvp Github
ps2:有一個(gè)難點(diǎn),就是為Gradle 寫Plugin的過程,推薦文章在AndroidStudio中自定義Gradle插件,相關(guān)注意事項(xiàng)在里面寫的比較詳細(xì)
ps3:我看得遠(yuǎn),是因?yàn)槲艺驹诰奕说募绨蛏稀#ㄙu個(gè)萌,手動(dòng)滑稽)