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

推荐订阅源

The Hacker News
The Hacker News
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
V
Visual Studio Blog
小众软件
小众软件
MyScale Blog
MyScale Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Full Disclosure
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
T
Tor Project blog
Jina AI
Jina AI
GbyAI
GbyAI
C
Comments on: Blog
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
A
Arctic Wolf
有赞技术团队
有赞技术团队
SecWiki News
SecWiki News
L
Lohrmann on Cybersecurity
Security Latest
Security Latest
Webroot Blog
Webroot Blog
C
Cisco Blogs
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
K
Kaspersky official blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
宝玉的分享
宝玉的分享
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
H
Hacker News: Front Page
D
Darknet – Hacking Tools, Hacker News & Cyber Security
D
Docker
P
Palo Alto Networks Blog
The Register - Security
The Register - Security
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志

博客园 - 随我畅翔

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的配置,提升插件运行过程中的用户体验。