• 0755-82538016
  • 0755-82560826
  • 深圳网站建设_APP小程序开发_博纳网络

    • 网站建设案例
      • ";

        营销网站建设

        全网营销网站

        高端网站建设

        商城网站建设

        外贸网站建设

        小程序开发

        区块链开发

        物联网项目开发

        定制app开发

        在线教育网站

        速成网站建设

        服装网站建设

        餐饮网站建设

        珠宝首饰网站

        机械制造网站

        文化旅游网站

        家装建材网站

        美容化妆品网站

        数码产品网站

        模板案例库

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站推广
      • ";

        网站优化基础

        建站优化

        网站优化

        营销推广

        整站优化

        推广帮助

        谷歌搜索

        推广方案

        推广套餐

        推广技巧

        百度排名

        巧用微博推广

        直播视频网站推广法

        微信推广网站方法

        网站外链推广

        公共微信号推广

        网站优化闲谈

        常见问题

        公司资讯

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站制作资讯
      • ";

        网站制作

        外贸网站建设

        网站设计

        网站代运营

        深圳网站建设专栏

        深圳小程序开发

        网站改版

        APP开发

        网站建设方案

        安全维护

        软件开发

        平台搭建

        建站行业资讯

        域名注册

        虚拟主机

        企业邮局

        国外主机

        VPS独享空间

        免备案香港服务器

        如何解析域名

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 网站报价
      • ";

        网站报价

        建站方案

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 公司动态
      • ";
        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 关注博纳
      • ";

        网站制作精英团队

        网站建设公司愿景

        公司介绍

        主营业务

        博纳文化

        加入博纳

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
    • 联系我们
      • ";

        网站建设公司联系方式

        网站建设、网站制作公司乘车路线

        联系电话:0755-82560826 82538016 82560635邮箱:qin@198bona.com地址:深圳市福田区皇岗路5007神采苑402栋610
      网站制作资讯

      当前位置:

        主页网站制作资讯APP开发安卓APP开发关于AOP技术的使用详解

      安卓APP开发关于AOP技术的使用详解

      发布时间:2019-06-01

      文章编辑:网站建设 文章来源:APP开发 浏览量:次

        安卓APP开发关于AOP技术的使用详解,首先深圳APP开发公司提醒在工程里添加一个名为“liba_aspectj”的Module,包含AspectJ相关功能代码,如图28-1所示:图28-1AOPAspect.java里是AspectJ功能代码,AOPTimer.java里是计时功能代码。此Module的build.gradle文件内容如下:
      import com. android. build. gradle. LibraryPlugin import org. aspectj. bridge. IMessage import org. aspectj. bridge. MessageHandler import org. aspectj. tools. ajc. Main
      apply plugin: 'com. android. library' buildscript {     repositories {         jcenter()    }     dependencies {         classpath 'com. android. tools. build: gradle: 2. 1. 0'         classpath 'org. aspectj: aspectjtools: 1. 8. 9'         classpath 'org. aspectj: aspectjweaver: 1. 8. 9'    } } repositories {     mavenCentral() } dependencies {     compile 'org. aspectj: aspectjrt: 1. 8. 9'     compile 'com. android. support: appcompat- v7: 22. 2. 1' } android {     compileSdkVersion 23     buildToolsVersion '23. 0. 2'     lintOptions {
        abortOnError false    } } android. libraryVariants. all { variant ->     LibraryPlugin plugin = project. plugins. getPlugin( LibraryPlugin)     JavaCompile javaCompile = variant. javaCompile     javaCompile. doLast {         String[] args = ["-showWeaveInfo",                         "-1. 8",// 当前 使用 的 JDK 版本                         "-inpath", javaCompile. destinationDir. toString(),                         "-aspectpath", javaCompile. classpath. asPath,                         "-d", javaCompile. destinationDir. toString(),                         "-classpath", javaCompile. classpath. asPath,                         "-bootclasspath", plugin. project. android. bootClasspath. join(                 File. pathSeparator)]         MessageHandler handler = new MessageHandler( true);         new Main(). run( args, handler)         def log = project. logger         for (IMessage message : handler. getMessages( null, true)) {             switch (message. getKind()) {                 case IMessage. ABORT:
        case IMessage. ERROR:                 case IMessage. FAIL:                     log. error message. message, message. thrown                     break;                 case IMessage. WARNING:                 case IMessage. INFO:                     log. info message. message, message. thrown                     break;                 case IMessage. DEBUG:                     log. debug message. message, message. thrown                     break;            }        }    } }
      如要在application模块的代码里使用AspectJ库,需要在build.gradle文件里添加如下代码:
      import org. aspectj. bridge. IMessage import org. aspectj. bridge. MessageHandler import org. aspectj. tools. ajc. Main buildscript {
        repositories {         mavenCentral()    }     dependencies {         classpath 'org. aspectj: aspectjtools: 1. 8. 9'    } } apply plugin: 'com. android. application' dependencies {     compile project(': liba_ aspectj') } … final def log = project. logger final def variants = project. android. applicationVariants variants. all { variant ->     if (!variant. buildType. isDebuggable()) {         log. debug(" Skipping non- debuggable build type '${variant. buildType. name}'.")         return;    }     JavaCompile javaCompile = variant. javaCompile
        javaCompile. doLast {         String[] args = ["-showWeaveInfo",                         "-1. 8",                         "-inpath", javaCompile. destinationDir. toString(),                         "-aspectpath", javaCompile. classpath. asPath,                         "-d", javaCompile. destinationDir. toString(),                         "-classpath", javaCompile. classpath. asPath,                         "-bootclasspath", project. android. bootClasspath. join( File.                           pathSeparator)]         log. debug "ajc args: " + Arrays. toString( args)         MessageHandler handler = new MessageHandler( true);         new Main(). run( args, handler);         for (IMessage message : handler. getMessages( null, true)) {             switch (message. getKind()) {                 case IMessage. ABORT:                 case IMessage. ERROR:                 case IMessage. FAIL:                     log. error message. message, message. thrown                     break;                 case IMessage. WARNING:                     log. warn message. message, message. thrown                     break;                 case IMessage. INFO:
        log. info message. message, message. thrown                     break;                 case IMessage. DEBUG:                     log. debug message. message, message. thrown                     break;            }        }    } }
       
      如要在library模块的代码里使用AspectJ库,需要在build.gradle文件里添加如下代码:
      import com. android. build. gradle. LibraryPlugin import org. aspectj. bridge. IMessage import org. aspectj. bridge. MessageHandler import org. aspectj. tools. ajc. Main buildscript {     repositories {         mavenCentral()    }     dependencies {         classpath 'org. aspectj: aspectjtools: 1. 8. 9'
       } } apply plugin: 'com. android. library' … dependencies {         compile project(': liba_ aspectj') } android. libraryVariants. all { variant ->     LibraryPlugin plugin = project. plugins. getPlugin( LibraryPlugin)     JavaCompile javaCompile = variant. javaCompile     javaCompile. doLast {         String[] args = ["-showWeaveInfo",                         "-1. 8",                         "-inpath", javaCompile. destinationDir. toString(),                         "-aspectpath", javaCompile. classpath. asPath,                         "-d", javaCompile. destinationDir. toString(),                         "-classpath", javaCompile. classpath. asPath,                         "-bootclasspath", plugin. project. android. bootClasspath. join(                 File. pathSeparator)]         MessageHandler handler = new MessageHandler( true);         new Main(). run( args, handler)
        def log = project. logger         for (IMessage message : handler. getMessages( null, true)) {             switch (message. getKind()) {                 case IMessage. ABORT:                 case IMessage. ERROR:                 case IMessage. FAIL:                     log. error message. message, message. thrown                     break;                 case IMessage. WARNING:                 case IMessage. INFO:                     log. info message. message, message. thrown                     break;                 case IMessage. DEBUG:                     log. debug message. message, message. thrown                     break;            }        }    } }
      如要注入代码,需要先定义Pointcut,常用的指令格式如下所示:
      execution( modifiers- pattern? ret- type- pattern declaring- type- pattern?
      name- pattern( param- pattern) throws- pattern?)
      modifiers-pattern:修饰符ret-type-pattern:方法的返回值类型declaring-type-pattern:方法所属的包名或类名name-pattern:方法名param-pattern:方法参数throws-pattern:方法抛出的异常类型注意:带?表示参数是可选项。使用的最多的返回类型模式是*,表示匹配任意的返回类型。方法参数的具体表示:()匹配了一个不接受任何参数的方法(..)匹配了一个接受任意数量参数的方法(零或者更多)(*)匹配了一个接受一个任何类型的参数的方法
      (*,String)匹配了一个接受两个参数的方法,第一个可以是任意类型,第二个则必须是String类型。如工程中包含如图28-2所示的包和类:MainActivity.java中有如下代码:
      @Override protected void onCreate( Bundle savedInstanceState) {     super. onCreate( savedInstanceState);     setContentView( R. layout. activity_ main);     Toolbar toolbar = (Toolbar) findViewById( R. id. toolbar);     setSupportActionBar( toolbar);     initVariables();
      initViews();     loadData(); } public void initVariables() {    … } public void initViews () {    … } public void loadData () {    … } public void logIn() {     Intent intent = new Intent( MainActivity. this, LoginActivity. class);     startActivity( intent); }
      在LoginActivity.java中定义了以下方法:
      @Override
      protected void onCreate( Bundle savedInstanceState) {     super. onCreate( savedInstanceState);     setContentView( R. layout. activity_ login); } @Override public void finish(){     super. finish(); } @Override public void onBackPressed(){     super. onBackPressed(); }
      想要输出com.example.aop包里所有onCreate方法的执行时间,按如下方式定义Pointcut:private static final String POINT_ METHOD = "execution(* com. example. aop.*. onCreate(..))";
      之前提到,注入代码的方式有before、after和around3种,表示在目标方法执行之前、执行后和执行前后同时注入代码。好了,APP开发公司本文关于“安卓APP开发关于AOP技术的使用详解”的APP制作知识就分享到这里,谢谢关注,本站下期会继续就这个问题与各位进行分享,博纳网络编辑整理。
       

      当前文章链接:/construction/appkaifa/2842.html
      上一篇:制作APP关于Log输出时的注意事项log数据格式化方案 下一篇:开发APP的公司详解怎样执行APP版本管理?
      返回列表
      如果您觉得案例还不错请帮忙分享:

      [声明]本网转载网络媒体稿件是为了传播更多的信息,此类稿件不代表本网观点,本网不承担此类稿件侵权行为的连带责任。故此,如果您发现本网站的内容侵犯了您的版权,请您的相关内容发至此邮箱【qin@198bona.com 】,我们在确认后,会立即删除,保证您的版权。

      相关案例推荐

      • 网站建设案例1

        网站建设案例1

        APP

        网站建设案例1

      • 绍兴平安网

        绍兴平安网

        行业网站

        绍兴平安网

      • 衡源快餐行业网站建设作案例

        衡源快餐行业网站建设作案例

        行业网站

        衡源快餐行业网站建设作案例

      资讯分类

      • 网站制作
      • 外贸网站建设
      • 网站设计
      • 网站代运营
      • 深圳网站建设专栏
      • 深圳小程序开发
      • 网站改版
      • APP开发
      • 网站建设方案
      • 安全维护
      • 软件开发
      • 平台搭建
      • 建站行业资讯
      • 域名注册
      • 虚拟主机
      • 企业邮局
      • 国外主机
      • VPS独享空间
      • 免备案香港服务器
      • 如何解析域名

      最新发布

      • 社区APP开发上线后影响用户使用的粘性有哪些?
      • 为什么说大健产业O2OAPP开发潜力无限
      • 网络公司对社区O2OAPP开发基本认识
      • 工业4.0时代怎样做好一个APP的开发工作?
      • APP开发公司分析APP应用开发下一个巨头在哪些领域?
      • APP电子商务平台开发前景如何?
      • 社交类型APP开发需要具备的五个必要条件
      • 社交类型APP平台开发使用小程序还是APP模式好?
      • 使用HTML语言开发APP商城可以吗?
      • 社区O2OAPP开发的方向选择

      相关资讯

      • APP网站制作流程以及栏目分布
      • 企业网站优化人员面对搜索引擎的困惑
      • 企业门户网站如何做好针对搜索引擎的优化工作
      • APP/PC购物商城网站如何做好产品图片的优化技巧
      • 网站软文内容以及网站外链存在的几种形式对网站有多大影响
      • 如何做好网站软文标题的描述更适合搜索引擎的需要?
      • 网站建设好后期出现被搜索引擎降权的几个主要因素
      • 小程序开发制作前途取决于市场,别被您的同行抢了先机
      • APP开发公司提醒您关注:电商平台要求商家“二选一”引多方不满 专家提建议
      • APP为什么会在我们的手机界面上变成僵尸图标?

      热门搜索

      • 网站优化
      • 网站设计
      • 关键词布局
      • 小程序开发
      • 网站制作
      • 学校网站制作
      • 代运营网站
      • 福田网站建设
      • 网站开发
      • 公司网站制作

      Copyright © 2021 博纳网络 版权所有  粤ICP备17054727号

      • 🏠

        首页

      • 💬

        咨询

      • 📞

        通话

      • 📂

        案例

      • ⬆

        返回