惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
WordPress大学
WordPress大学
Jina AI
Jina AI
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
N
Netflix TechBlog - Medium
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
月光博客
月光博客
博客园 - Franky
Y
Y Combinator Blog
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
雷峰网
雷峰网
小众软件
小众软件
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 随我畅翔

APP测试相关点归纳 APP自动化测试 android app 压力测试工具-monkey tool android测试开发环境搭建 通过CMD命令行创建和使用Android 模拟器 AVD android 内存泄露测试 iOS Automated Tests with UIAutomation 命令方式重新签名apk Monkey log分析说明 iOS应用程序生命周期 RunTests.sh && RunIPhoneSecurityd.sh ios UI自动化测试 ios UnitTest 学习笔记1 如何通过Xcode 5中集成的XCTest框架进行简单的单元测试 curl命令使用大全 APP启动原理 Git和SVN的5个基本区别 IOS自动化测试之UIAutomation 编写Robotium测试程序
NullPointerException检测
随我畅翔 · 2014-04-25 · via 博客园 - 随我畅翔

APET-NPE插件工作原理

android应用程序编译的过程如下:

从图中,我们可以看出,app编译大致经历了四大阶段:java source files -> .class files -> .dex files -> .apk package 。分析这些阶段,我们兴奋的发现,过程中会产生.class文件,因此,可以借鉴字节码的思路来实现检测目标。

该插件的工作原理如下:

通过合理选择编译过程文件+改造findbugs,扫描过程文件(.class files)来实现NullPointerException检测。

PS:绿色部分为人机交互动作,接下来会详细描述。

怎么安装APET-NPE插件

1、入口链接

入口链接: http://tools.taobao.net/site/store/product_detail.htm?product_id=336

2、安装

方式一:

(1)使用eclipse的插件安装功能 Help -> Install New Software

(2)在Work with输入链接 http://tools.taobao.net/file/eclipsePlugin/eclipse/336/update_site

(3)勾选下面的apet,点next安装

(4)重启eclipse

建议取消 Contact all update sites during install to find required software的勾选,已提高安装速度。

注意:mac和ubuntu操作系统只能采用方式一安装,否则会导致eclipse无法启动!

方式二:

(1)确保eclipse处于关闭状态

(2)拷贝解压后的下载包,直接粘贴至 \eclipse 目录下

推荐使用方式一安装

3、修改eclipse配置(可选,但推荐做)

我们都知道,eclipse是内存大户,eclipse的启动配置,直接影响着它的运行速度和用户体验。因此,我们推荐大家使用以下配置:

1)找到eclipse.ini文件,打开

(2)推荐删除 --launcher.XXMaxPermSize项,并修改-vmargs配置

==============

windows操作系统

-vmargs

-Dosgi.requiredJavaVersion=1.5

-Dhelp.lucene.tokenizer=standard

-Xms512m

-Xmx512m

-XX:PermSize=96m

-XX:MaxPermSize=96m

-Xmn128m

-XX:+DisableExplicitGC

==============

==============

mac操作系统

-vmargs

-Dosgi.requiredJavaVersion=1.5

-Dhelp.lucene.tokenizer=standard

-XstartOnFirstThread

-Dorg.eclipse.swt.internal.carbon.smallFonts

-Xms512m

-Xmx512m

-XX:PermSize=256m

-XX:MaxPermSize=256m

-Xmn128m

-XX:NewRatio=8

-XX:+DisableExplicitGC

-Xdock:icon=../Resources/Eclipse.icns

-XstartOnFirstThread

-Dorg.eclipse.swt.internal.carbon.smallFonts

==============

==============

ubuntu操作系统

-vmargs

-Dosgi.requiredJavaVersion=1.5

-Dhelp.lucene.tokenizer=standard

-Xms512m

-Xmx512m

-XX:PermSize=128m

-XX:MaxPermSize=256m

-Xmn128m

-XX:+DisableExplicitGC

==============

PS经过测试,优化后的配置,比默认配置减少67.8%FGC次数,有效提升eclipse速度和体验 :)

4、启动eclipse

怎么使用APET-NPE插件

很简单,操作分为四步进行:

1、打开bugs table视图:Window -> Show View -> Other -> Apet Category -> bugs table

2、选中目标项目/文件夹/文件,点击图标(可以关注 eclipse右下角的进度信息)

3、双击 bugs table 视图 Description列,查看具体的NullPointerException代码

4、改代码,fix NPE bug

截图如下:

1、打开bugs table

2、选中检测对象,进行扫描

3、查看详细的问题代码

APET-NPE与官方findbugs的区别

有同学问到,按照字节码的思路,findbugs本身就可以扫描NullPointerException,为什么还要自己开发一套新插件呢? 这个问题提的非常好,年初我们也想直接用findbugs,但不能如愿,它本身的特性,限制了它在android领域的作用,最直接的一点,就是它无法直接扫描android代码。于是,jimmy也就应运而生了。

APET-NPE较官方findbugs而言,有以下优势,欢迎大家鉴定:

1、量身定制:我们改造了findbugs的逻辑,简化了android工程的扫描过程。同时在它上面封装一层业务代码,用来选择文件、记录文件路径、管理findbugs启动停止等;

2、支持多任务:APET-NPE能并行处理多任务,且结果视图更清晰易懂,bug描述中文化、简洁化,而官方findbugs只能一次处理一个任务(前提都是要import到eclipse中);

3、精简规则:使潜在缺陷的数量从“千数量级”降低到“10数量级”,提高开发、测试工程师的工作效率;

4、优化逻辑:从逻辑上做了优化,避免findbugs扫描过程中产生的过度消耗机器内存,eclipse挂起、无响应的现象,提高稳定性;

5、贴心推荐eclipse配置:充分优化eclipse.ini中-vmargs的配置,提升插件运行过程中的用户体验。