首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

看AspectJAndroid的强势插入

那么AOP这种编程思想有什么用呢,一般来说,主要用于不想侵入原有代码的场景,例如SDK需要无侵入的宿主插入一些代码,做日志埋点、性能监控、动态权限控制、甚至是代码调试等等。...Android项目中使用AspectJ AOP的用处非常广,从Spring到Android,各个地方都有使用,特别是在后端,Spring已经使用的非常方便了,而且功能非常强大,但是Android...Android上集成AspectJ实际上是比较复杂的,不是一句话就能compile,但是,鄙司已经给大家把这个问题解决了,大家现在直接使用这个SDK就可以很方便的Android Studio中使用AspectJ...我们可以看见,只有testAOP2()方法中被插入了代码,这就做到了精确条件的插入。...我们可以看见com.xys.aspectjxdemo包下的所有方法都被加上了try catch,同时,catch,被插入了我们切入的代码,但是最后,他依然会throw e,也就是说,这个异常已经会被抛出去

2.4K50
您找到你想要的搜索结果了吗?
是的
没有找到

从精准化测试看ASMAndroid的强势插入-总纲

背景 测试过程,经常会遇到这样的问题: 我自测过了,你简单测下就好了。 代码重构了,我也不知道影响什么业务…… 我就升级了SDK,不知道有什么影响…… 代码改动挺多的,要么全测一遍吧!...技术选型 服务端开发,通常使用「单测+覆盖率」的方式来保证代码的执行覆盖程度,所以,这里借助代码覆盖率,来作为关联代码和用例的桥梁。 ❝日企单测跑覆盖率,大于95%才算合格的单测。...❞ 移动端,代码覆盖率通常使用JaCoCo,即 Java Code Coverage来实现。 实际开发过程,一般不太会对全量代码做检测,所以,需要改造JaCoco,提供增量探针功能。...测试用例库查找相应的代码映射关系 获取推荐的测试用例集 一个测试用例的执行,代码层面上来看,实际上就是一系列函数的调用链。执行测试用例的时候,函数调用链上记录下对应的关系即可。...向大家推荐下我的网站 https://xuyisheng.top/ 点击原文一键直达 专注 Android-Kotlin-Flutter 欢迎大家访问

1.2K30

从精准化测试看ASMAndroid的强势插入-字节码

每个Class文件都以8位为单位的字节流组成,下面是一个Class文件中所包括的内容,Class文件,各项内容按照严格顺序连续存放,Java虚拟机只要按照协议顺序来读取即可。...,常量池本质上就是一个数组存储了类中出现的所有数值、字符串和类型常量,这些常量仅需要在这个常量池部分定义一次,就可以利用其索引,类文件的所有其他各部分进行引用 字节码的执行过程 字节码Java虚拟机是以堆栈的方式进行运算的...,类似CPU的寄存器,Java虚拟机,它使用堆栈来完成运算,例如实现「a+b」的加法操作,Java虚拟机,首先会将「a」push到堆栈,然后再将「b」push到堆栈,最后执行「ADD」指令...类型描述符 我们Java代码的类型,字节码,有相应的表示协议。...向大家推荐下我的网站 https://xuyisheng.top/ 点击原文一键直达 专注 Android-Kotlin-Flutter 欢迎大家访问

66571

从精准化测试看ASMAndroid的强势插入-读懂diff

我们计算增量代码覆盖率的基础,就是要找出两个版本代码的差异,Git环境下,我们可以很方便的通过Git脚本来获取这些数据。...= @@)' 借助这样一个正则表达式和grep,就可以从diff信息找出修改的文件和行号,执行如下: app/src/main/java/com/yw/qdcoverage/MainActivity.kt...如果在脚本,可以借助正则表达式来获取。 Pattern.compile("^@@ -(\\d+),?(\\d+)? \\+(\\d+),?(\\d+)?...这样通过下面的代码就可以获取新文件的修改行: matcher.group(3) matcher.group(4) 以上就是我们获取增量信息的基础,借助git的这些指令,我们就为后续JaCoco探针的插入...向大家推荐下我的网站 https://xuyisheng.top/ 点击原文一键直达 专注 Android-Kotlin-Flutter 欢迎大家访问

74140

从精准化测试看ASMAndroid的强势插入-Plugin调试

Gradle作为一个脚本工具,开发的过程,最痛苦的莫过于「调试」,大部分时候,我们都是通过Log的方式来进行调试,在编译过程,可以很清楚的看见执行过程,同时也能看到系统的其它执行的Task。...String) { Logging.getLogger(MyPlugin::class.java).lifecycle(log) } 通过getLogger就可以获取Logging的实例,它和Android...断点调试 Gradle插件的断点调试不能像普通代码那样调试,需要借助Android Studio的Remote调试功能。...首先,需要在Android Studio创建一个Remote调试器,在运行标签上点击「Edit Configuration」,再点击「+」新增一个调试类型,选择Remote,将其命名为「plugin_debug...向大家推荐下我的网站 https://xuyisheng.top/ 点击原文一键直达 专注 Android-Kotlin-Flutter 欢迎大家访问

95650

从精准化测试看ASMAndroid的强势插入-Gradle插件

hl=zh-cn#new_configurations Gradle Plugin有三种存在形式: 构建脚本:直接写在项目当前的build.gradle buildSrc:项目根目录下的buildSrc...buildSrc,不用每次publish到App,可以直接参与编译,调试比较方便,但是等插件稳定后,通过独立的插件项目,可以让插件的集成和管理更加方便。...使用 使用插件的项目根目录Gradle文件,指定访问mavenLocal,同时,使用groupId、artifactId和version组成对插件的引用,如下所示。...复制中间产物的过程,就是我们对产物进行修改的时机。...Gradle中使用Gradle需要对原有脚本做一些改造,首先,要将build.gradle脚本改为buld.gradle.kts,然后将Kotlin代码放到src/man/kotlin目录下,最后,脚本的代码也要做相应的更新

1K40

从精准化测试看ASMAndroid的强势插入-JaCoco初探

,我们Android项目中,也集成了JaCoco,官网文档如下。...apply plugin: 'jacoco' 并在android标签,增加开关。...JaCoco插桩原理 JaCocoAndroid上只能使用Offline mode,它的实现机制其实很简单,我们反编译一下它插入的代码。...性能影响 由于JaCoco只是插入一个探针数组,所以对代码执行的性能开销影响不大,但是由于插入大量的探针代码,所以代码体积会增大不少,一般情况下,Android会在测试包插入,而在正式包中去除插入逻辑...从精准化测试看ASMAndroid的强势插入-字节码 从精准化测试看ASMAndroid的强势插入-Plugin调试 本文原创公众号:群英传,授权转载请联系微信(Tomcat_xu),授权后

3.1K30

android ListView 的 item 插入 GridView 仿微信朋友圈图片显示。

然后我们需要两个数据辅助类,类似上述,一个是专门来保存在GridView要显示的每张图片的信息,例如它的url、name、id等等,暂称该辅助类为 UserImgs,大家可以随便增删,另一个是总的专门保存...listView的item的数据,我们称它为UserInfo,这里,说明下,因为每条 item 都有一个自己的GridView,也就是说,UserInfo必须要有一个UserImgs类实例,用来存储图片信息...; 8 import android.graphics.Bitmap; 9 import android.util.Log; 10 import android.view.LayoutInflater...; 11 import android.view.View; 12 import android.view.ViewGroup; 13 import android.widget.AdapterView...} 94 });*/ 95 }else{ // 一定要加 else 防止GridView 的数据重复显示,不同的

2.3K50

Android 逆向】启动 DEX 字节码的 Activity 组件 ( PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )

文章目录 前言 一、 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader 1、创建 DexClassLoader 2、使用 DexClassLoader...实例对象作为 PathClassLoader 的父节点 二、完整代码示例 三、执行结果 四、博客资源 前言 ---- 上一篇博客 【Android 逆向】启动 DEX 字节码的 Activity...| 失败原因分析 | 自定义类加载器没有加载组件类的权限 ) 博客 提出的 加载组件类的 第二种方案 ; 一、 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader...// 类加载器的双亲委派机制的 PathClassLoader 和 BootClassLoader 之间 // 插入 DexClassLoader if...ClassLoader 的双亲委派体系 , 插入自定义的 DexClassLoader // I.

1.2K30

android配置 slf4j + log4j 日志记录框架

需求: 项目开发,需要记录 操作日志 。起初自己写了个简单的日志记录文本写入到文本的方法,后来随着项目的膨胀,需要考虑更多的操作,开始考虑性能问题。...slf4j 是日志记录的一个facade,支持多种日志框架。log4j是个很优秀的日志记录框架。...中使用,还需要一个配置工具 国内可能打不开,本文后的示例包含有 需要使用的类库: 你需要在下载到的类库中找到下面的jar包,具体请忽略版本号部分,在你读到本文的时候可能有了更新的版本。...android-logging-log4j-1.0.3.jar    android配置log4j时需要使用这个类库。...自定义个application类,继承自 Application,onCreate启动时配置日志,代码如下: package vir56k.logdemo; import android.app.Application

2.7K00

Realm、WCDB与SQLite移动数据库性能对比测试

优势:兼顾iOS和Android两个平台;简单易用,学习成本低;提供了一个轻量级的数据库查看工具,开发者可以查看数据库当中的内容,执行简单的插入和删除数据的操作。...三者对比: 由于Realm单次事务操作一万次耗时过长,图表显示起来也就没有了意义,因此下面图中Realm的耗时是按照事务批量操作耗时来记录的,实际上WCDB的插入操作是优于Realm的。...按照参考资料[3]的测试结果,Realm插入速度上比SQLite慢,比用FMDB快,而查询是比SQLite快的。...,不同于SQLite的SQL语句(即使用FMDB封装的操作依然有点麻烦),Realm日常使用上非常简单,起码在这次测试的例子两个数据库同样的一些操作,Realm的代码只有SQLite的一半。...NSData及NSString属性不能保存超过16M数据,如果有大的可以分块。

3.2K10

微信 WCDB 进化之路 - 开源与开始

试想这么一段代码: 这段封装很简单,就是将消息内容插入到数据库。...与此同时,微信内也产生了一些新的需求:聊天记录备份。 聊天记录备份是会不断地读取手机上的聊天记录,并传输到PC/Mac微信上。换句话说,就是单线程下会不断地阻塞数据库。... Android SDK SQLite 是会不断升级的,实际上使用哪个版本的 SQLite 取决于 APP 运行在哪个版本的系统上,这是对开发者来说相当不友好,因为同样的 SQL 语句会有不同的性能表现...通力合作 ---- 随着时间推移,微信的聊天记录越来越多,数据库查询就成为了一个性能瓶颈,这个问题在 Android 平台上尤为严重。...原来,SQLite 初始化的时候,会将 sqlite_master 表的元信息加载进一个 Hash 表,而这个表的默认容量是 1KB,对于大小为 32 字节的节点,只需超过 32 个表,就会将其填满

1.4K40

微信 WCDB 进化之路:开源与开始

试想这么一段代码: [1500963794873_780_1500963794864.jpg] 这段封装很简单,就是将消息内容插入到数据库。...与此同时,微信内也产生了一些新的需求:聊天记录备份。 聊天记录备份是会不断地读取手机上的聊天记录,并传输到PC/Mac微信上。换句话说,就是单线程下会不断地阻塞数据库。... Android SDK SQLite 是会不断升级的,实际上使用哪个版本的 SQLite 取决于 APP 运行在哪个版本的系统上,这是对开发者来说相当不友好,因为同样的 SQL 语句会有不同的性能表现...通力合作 随着时间推移,微信的聊天记录越来越多,数据库查询就成为了一个性能瓶颈,这个问题在 Android 平台上尤为严重。...原来,SQLite 初始化的时候,会将 sqlite_master 表的元信息加载进一个 Hash 表,而这个表的默认容量是 1KB,对于大小为 32 字节的节点,只需超过 32 个表,就会将其填满

5.3K51
领券