XTrace,AOP在Android的實踐

XTrace是AOP在Android的簡單實踐,踩了一系列坑。希望能幫助您將AOP運用到Android。歡迎star、fork,期待提出您的寶貴意見。

以下是我的踩坑筆記

AOP概述

做過J2EE開發(fā)的同學對AOP一定非常熟悉,在J2EE中,面向切面編程的實現(xiàn)一般有AspectJ、Spring Aop等,抱歉,我只用過這兩個。AOP的主要名詞有:Aspect、Pointcut、Advise等。在這里,我選用AspectJ做Android平臺的AOP。

Gradle插件

AspectJ是在編譯階段對字節(jié)碼進行操作,因此需要它獨立的編譯器ajc。在Android Studio中,可以通過Gradle腳本啟用ajc編譯器。為了方便開發(fā)AOP,我搞了個小插件(很簡單的),在需要引入AOP的library或Application中引入就好。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'cn.droidlover:AspectJAs:1.0.2'
    }
}

在相應的模塊中使用插件:

apply plugin: 'cn.droidlover.aspectjas'

開發(fā)Gradle插件遇到的坑

  • 需要在java目錄下建立resources/META-INF/gradle-plugins目錄
  • 需要在radle-plugins目錄下建立plugin_name.properties文件。如上面的插件名稱為cn.droidlover.aspectjas,則該文件名應為:cn.droidlover.aspectjas.properties
  • 文件內(nèi)容為:
implementation-class=插件入口path

如上述插件則為:

implementation-class=cn.droidlover.aspectjas.AspectJAs

插件入口即 class implements Plugin<Project>的類,每個插件只有一個入口。

  • 可以將自己寫的插件上傳到本地maven倉庫
apply plugin: 'groovy'
apply plugin: "maven"

dependencies {
    compile gradleApi()
    compile localGroovy()
    compile 'com.android.tools.build:gradle:2.1.0'
}

repositories {
    jcenter()
}

// 上傳到本地代碼庫
uploadArchives{
    repositories{
        mavenDeployer{
            repository(url:uri('../repo'))
            pom.groupId = 'cn.droidlover' // 組名
            pom.artifactId = 'AspectJAs' // 插件名
            pom.version = '1.0.2' // 版本號
        }
    }
}

使用的時候只需要加上maven地址就好:

maven{
     url uri('/repo')
}

XTrace說明

XTrace的目標是具有@Trace注解的方法,其主要功能是:將執(zhí)行方法標識、執(zhí)行方法名稱、執(zhí)行參數(shù)傳值、執(zhí)行時間、返回值等進行Log日志輸出。

xtrace_1.png

運行結果為:

xtrace_2.png

使用方法:

@Trace("聊天")
public void onChat(View view) {
    try {
        Thread.sleep(20);
    } catch (InterruptedException e) {
           e.printStackTrace();
    }
}

@Trace("求和")
private int sum(int a, int b) {
    return a + b;
}

您可以根據(jù)這個進行擴展,比如進行用戶行為的統(tǒng)計等。

我的其他分享:

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評論 19 139
  • afinalAfinal是一個android的ioc,orm框架 https://github.com/yangf...
    passiontim閱讀 15,876評論 2 45
  • 境外旅游保險購買注意事項 境外旅游可能遇到很多意想不到的事情,而有些事情的發(fā)生會讓我們損失很多,境外旅游保險,可以...
    眾保咨詢閱讀 696評論 0 1
  • 第一次見他,是在教導處,他趴在辦公桌上寫試卷,抬眼看人的眼神里滿是冷漠,骨子里透著倔強。試卷寫好了,他沒喊老師,只...
    改變自己369閱讀 355評論 0 5

友情鏈接更多精彩內(nèi)容