欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中使用AspectJ詳解

 更新時間:2017年04月07日 09:15:14   作者:vonnie  
本文主要介紹了Android中使用AspectJ的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧

什么是AOP

AOP是Aspect Oriented Programming的縮寫,即『面向切面編程』。它和我們平時接觸到的OOP都是編程的不同思想,OOP,即『面向?qū)ο缶幊獭?,它提倡的是將功能模塊化,對象化,而AOP的思想,則不太一樣,它提倡的是針對同一類問題的統(tǒng)一處理,當(dāng)然,我們在實(shí)際編程過程中,不可能單純的安裝AOP或者OOP的思想來編程,很多時候,可能會混合多種編程思想,大家也不必要糾結(jié)該使用哪種思想,取百家之長,才是正道。

那么AOP這種編程思想有什么用呢,一般來說,主要用于不想侵入原有代碼的場景中,例如SDK需要無侵入的在宿主中插入一些代碼,做日志埋點(diǎn)、性能監(jiān)控、動態(tài)權(quán)限控制、甚至是代碼調(diào)試等等。

AspectJ

AspectJ實(shí)際上是對AOP編程思想的一個實(shí)踐,當(dāng)然,除了AspectJ以外,還有很多其它的AOP實(shí)現(xiàn),例如ASMDex,但目前最好、最方便的,依然是AspectJ。

在Android項目中使用AspectJ

在android中配置aspectj是特別麻煩的,嘗試在android studio中直接配置aspectj,折騰了半天沒有成功,就放棄了,還好github上有個開源的sdkhttps://github.com/HujiangTechnology/gradle_plugin_android_aspectjx,可以直接拿來用,很方便。

接入說明

在項目的根目錄的build.gradle文件中添加依賴,修改后文件如下

repositories {
  jcenter()
}
dependencies {
  classpath 'com.android.tools.build:gradle:2.3.0'
  classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:1.0.8'

  // NOTE: Do not place your application dependencies here; they belong
  // in the individual module build.gradle files
}

然后在項目或者庫的build.gradle文件中添加AspectJ的依賴

compile 'org.aspectj:aspectjrt:1.8.9'

同時在該文件中加入AspectJX模塊

apply plugin: 'android-aspectjx'

aspectjx默認(rèn)會遍歷項目編譯后所有的.class文件和依賴的第三方庫去查找符合織入條件的切點(diǎn),為了提升編譯效率,可以加入過濾條件指定遍歷某些庫或者不遍歷某些庫。

includeJarFilter和excludeJarFilter可以支持groupId過濾,artifactId過濾,或者依賴路徑匹配過濾

aspectjx {
  //織入遍歷符合條件的庫
  includeJarFilter 'universal-image-loader', 'AspectJX-Demo/library'
  //排除包含‘universal-image-loader'的庫
  excludeJarFilter 'universal-image-loader'
}

使用

創(chuàng)建一個AspectTest的類,

@Aspect
public class AspectTest {
  final String TAG = AspectTest.class.getSimpleName();

  @Before("execution(* *..MainActivity+.on**(..))")
  public void method(JoinPoint joinPoint) throws Throwable {
    MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
    String className = joinPoint.getThis().getClass().getSimpleName();

    Log.e(TAG, "class:" + className);
    Log.e(TAG, "method:" + methodSignature.getName());
  }
}

MainActivty的代碼如下

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
}

log如下

log

通過build之后會生成一個aspected.jar的文件

截圖

反編譯這個jar,會發(fā)現(xiàn)它在MainActivity的onCreate中插入了幾行代碼。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • TabLayout關(guān)聯(lián)ViewPager后不顯示文字的解決方法

    TabLayout關(guān)聯(lián)ViewPager后不顯示文字的解決方法

    這篇文章主要為大家詳細(xì)介紹了TabLayout關(guān)聯(lián)ViewPager后不顯示文字的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android編程實(shí)現(xiàn)設(shè)置TabHost當(dāng)中字體的方法

    Android編程實(shí)現(xiàn)設(shè)置TabHost當(dāng)中字體的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)設(shè)置TabHost當(dāng)中字體的方法,涉及Android針對TabHost屬性操作的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-12-12
  • Android開發(fā)之MediaPlayer多媒體(音頻,視頻)播放工具類

    Android開發(fā)之MediaPlayer多媒體(音頻,視頻)播放工具類

    這篇文章主要介紹了Android開發(fā)之MediaPlayer多媒體(音頻,視頻)播放工具類,涉及Android針對音頻文件的讀取、播放、暫停、繼續(xù)等操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • 你值得擁有的Android Studio開發(fā)小技巧

    你值得擁有的Android Studio開發(fā)小技巧

    這篇文章主要為大家分享了值得擁有的Android Studio開發(fā)小技巧,介紹幾個比較好用的技巧和快捷鍵,提升我們的編碼效率,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Android實(shí)現(xiàn)基于ZXing快速集成二維碼掃描功能

    Android實(shí)現(xiàn)基于ZXing快速集成二維碼掃描功能

    這篇文章主要為大家詳細(xì)介紹了Android二維碼掃描ZXing快速項目集成的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Android checkbox的listView具體操作方法

    Android checkbox的listView具體操作方法

    這篇文章主要介紹了Android checkbox的listView具體操作方法,重點(diǎn)就是存儲每個checkbox的狀態(tài)值,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Android自定義控件實(shí)現(xiàn)圓形進(jìn)度CircleProgressBar

    Android自定義控件實(shí)現(xiàn)圓形進(jìn)度CircleProgressBar

    這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)圓形進(jìn)度CircleProgressBar,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Android仿淘寶切換商品列表布局效果的示例代碼

    Android仿淘寶切換商品列表布局效果的示例代碼

    這篇文章主要介紹了Android仿淘寶切換商品列表布局效果的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 最新評論