当前位置:  编程技术>移动开发
本页文章导读:
    ▪pmd使用说明以及生成的汇报        pmd使用说明以及生成的报告 使用PMD检查代码      以前不知道PMD,最近听说了PC Lint,才开始接触PMD,这么好的工具,如果善用了,真是可以帮助提高很多,对自己的代码习惯、规范等都.........
    ▪ Xcode导入第三方库,比如TapkuLibrary        Xcode导入第三方库,例如TapkuLibrary iOS开源框架Tapku下载地址:https://github.com/devinross/tapkulibrary.git 1.创建你的工程项目。 2.将Tapku框架中src目录下的“TapkuLibrary.xcodeproj”文件拖动到工程文件列.........
    ▪ google地图中添加指南针图标       googlemap中添加指南针图标 代码很简单: /** * * @date Aug 29, 2012 * @fileName CompassView.java * */ public class CompassView extends View implements SensorEventListener { private static final String TAG="CompassView"; privat.........

[1]pmd使用说明以及生成的汇报
    来源: 互联网  发布时间: 2014-02-18
pmd使用说明以及生成的报告
使用PMD检查代码      以前不知道PMD,最近听说了PC Lint,才开始接触PMD,这么好的工具,如果善用了,真是可以帮助提高很多,对自己的代码习惯、规范等都有很大的帮助~

来看看他到底是怎么样的》。。。

    很多公司都在用的PC Lint是针对C/c++的一个静态代码审查工具,据说Microsoft把PC Lint审查无错误无警告作为代码要过的第一关;而PMD是个跟他功能类似的针对java的工具,PMD是开源的,可以下载到整个开源项目,其官网上有对其这样的简介(PMD):

简介

PMD scans Java source code and looks for potential problems like:

•Possible bugs - empty try/catch/finally/switch statements
•Dead code - unused local variables, parameters and private methods
•Suboptimal code - wasteful String/StringBuffer usage
•Overcomplicated expressions - unnecessary if statements, for loops that could be while loops
•Duplicate code - copied/pasted code means copied/pasted bugs
译:

PMD扫描java代码并寻找潜在的如下问题:

     1.可能的bug - 空try/catch/finally/switch语句

     2.无效代码 -未使用的变量,参数和私有方法

     3.非最佳的代码 - 较耗费资源的String/StringBuffer用法

     4.过于复杂的表达式 - 不必要的if语句,或应该为while的for循环

     5.重复代码 - 复制/粘贴代码意味着复制/粘贴bug

下载

这里可以下载最新版本的PMD(pmd-4.2.5),里面有源代码和bin zip,下载bin的压缩包就可以了,如下图:


我下载的时候,速度超慢,10KB/s的跳~

使用

下载下来之后,随便解压到任意目录,然后根据自己的目录修改下面的这个脚本(.bat),放置到解压出来的目录的bin文件夹下即可;

@echo off

rem 要检查的文件和路径,也可以是代码目录set filepath=E:\SRC\ComposeMessageActivity.javarem 报告输出的路径
set reportpath=E:\

rem 获取当前年月日和时分秒
set nowTime=%DATE:~0,10%" "%TIME:~1,7%

rem 替换:为-
set nowTime=%nowtime::=-%

rem 合成报告文件路径名
set outfile=%reportpath%%nowtime%.html

rem 指定输出的格式
set xslt="../etc/xslt/corley-pmd-report.xslt"

rem 指定检查规则,这里包括了官方推出的java的所有规则,也可以自己指定其他规则
set ruleset="rulesets/internal/all-java.xml"

rem 执行检查并输出报告
pmd %filepath% nicehtml %ruleset% -xslt %xslt% -reportfile %outfile%

运行这个脚本文件就可以得到报告文件如下:

Summary
Files Total QRank Level 1 QRank Level 2 QRank Level 3 QRank Level 4 QRank Level 5 QRank Level 6 QRank Level 7 QRank Level 8
1 18 0 0 18 0 0 0 0 0

--------------------------------------------

E:\SRC\ConfirmRateLimitActivity
Prio Begin Line Method Description
Total number of violations for this class: 18 (Click anywhere on this row to see/hide details) 
3 42  Found non-transient, non-static member. Please mark as transient or provide accessors.
3 43  Found non-transient, non-static member. Please mark as transient or provide accessors.
3 44  Found non-transient, non-static member. Please mark as transient or provide accessors.
3 44  To be compliant to J2EE, a webapp should not use any thread.
3 47 onCreate Avoid excessively long variable names like savedInstanceState
3 47 onCreate Parameter 'savedInstanceState' is not assigned and could be declared final
3 55 onClick Avoid variables with short names like v
3 55 onClick Parameter 'v' is not assigned and could be declared final
3 62 onClick Avoid variables with short names like v
3 62 onClick Parameter 'v' is not assigned and could be declared final
3 68 onCreate To be compliant to J2EE, a webapp should not use any thread.
3 71 run Log.v calls should be protected by checking Config.LOGV first
3 84 onResume Local variable 'delay' could be declared final
3 99 onPause super should be called at the end of the method
3 105 onKeyDown Parameter 'event' is not assigned and could be declared final
3 105 onKeyDown Parameter 'keyCode' is not assigned and could be declared final
3 113 doAnswer Parameter 'answer' is not assigned and could be declared final
3 114 doAnswer Local variable 'intent' could be declared final




Generated by PMD 4.2.5 on 2011-09-09 - 14:49:43.


(1).生成的报告界面十分友好,每个类存在什么级别的多少个问题,一目了然。

(2).存在的每个问题,如何修改的建议也一一指出,比如

line: 84
方法: onResume
建议:Local variable 'delay' could be declared final
意思是说,这个函数里的变量delay最好加上final关键字~     接下来便是按照提示一个个更改了,相信修改之后代码可以让自己慢慢欣赏了,因为里面检查的大多数规则,都是有着丰富经验的JAVA程序员提供的AST(抽象语义树,不用明白它具体什么意思,可以当做一条检查规则),它从程序容易出现的问题,和不规范的设计等等方面进行了检查。

    重要的是长期坚持,这样好的编程习惯应该会不自觉的形成,说实话,PMD真的很严格,苛刻,所以PMD和PC LInt这类工具不少公司在真正使用时都会对规则进行过滤,要不然搞出来的错误实在是太多了~~~


    
[2] Xcode导入第三方库,比如TapkuLibrary
    来源: 互联网  发布时间: 2014-02-18
Xcode导入第三方库,例如TapkuLibrary

iOS开源框架Tapku下载地址:https://github.com/devinross/tapkulibrary.git

1.创建你的工程项目。

2.将Tapku框架中src目录下的“TapkuLibrary.xcodeproj”文件拖动到工程文件列表中的Frameworks目录下。“TapkuLibrary.bundle”文件(里面包含所需要的图片等资源)拖动到工程文件列表的SupportingFiles下。(最好是用‘File’ 菜单中“Add files to project”命令来操作)在出现的添加文件窗口中,选择不copy,并且选择“Create Folder References…”,然后finish。

3.添加必要的框架QuartzCore.framework和MapKit.frameworks。(在“Build Phases”标签栏下Link Binary With Libraries组项中添加必要的框架)

4.将TapkuLibrary添加到Build Phases”选项卡下Target Dependencies组项中。

5.在“Build Phases”选项卡下Link Binary With Libraries组项中再添加libTapkuLibrary.a文件。图示:

6. 配置搜索路径(告诉工程,如何找到TapkuLibrary的Headers)。在Build Settings选项卡中的Search Path下的Header Search Paths上双击,添加路径,格式如下:‘$(SRCROOT)/工程名/Xxxx/src’(精确到tapku的src目录,xxx是你的中间目录,如果src直接放在工程根目录下,则无)。(不要点击Recursive选框)

7. 添加Other Linker Flags。增加这两条:“-ObjC”和“-all_load”。

8. 添加TouchJSON libraries(因为Tapku会用到)。还是拖曳Tapku的src目录下Framework下的TouchJSON到工程的Frameworks目录列表下,选择copy。

9. 至此,就可以通过#import导入正常使用。

#import<TapkuLibrary/TapkuLibrary.h>

 


    
[3] google地图中添加指南针图标
    来源: 互联网  发布时间: 2014-02-18
googlemap中添加指南针图标
代码很简单:
/**
 * 
 * @date Aug 29, 2012
 * @fileName CompassView.java
 *
 */
public class CompassView extends View implements SensorEventListener {

	private static final String TAG="CompassView";
	private Paint mPaint = new Paint();
    private Path mPath = new Path();
	private SensorManager sm;
	private float[] mValues;
	private MapView mapView;

	/**
	 * @param context
	 */
	public CompassView(Context context,MapView mapView) {
		super(context);
		this.mapView=mapView;
		sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
        mPath.moveTo(0, -12);
        mPath.lineTo(-8, 15);
        mPath.lineTo(0, 12);
        mPath.lineTo(8, 15);
        mPath.close();
	}
	
	public void register(){
		sm.registerListener(this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);
	}
	
	public void unregister(){
		sm.unregisterListener(this);
	}

	public void addLayout(RelativeLayout layout){
		LayoutParams lp=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		layout.addView(this);
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		Paint paint = mPaint;
        canvas.drawColor(Color.TRANSPARENT);
        paint.setAntiAlias(true);
        paint.setColor(Color.TRANSPARENT);
        paint.setStyle(Paint.Style.FILL);
        if(MapManager.myGeoPoint!=null){
        	paint.setColor(Color.BLUE);
        	Projection projection = mapView.getProjection(); 
        	Point point = projection.toPixels(MapManager.myGeoPoint, null);
        	canvas.translate(point.x, point.y-10);
        }
        if (mValues != null) {
        	if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_LANDSCAPE) {
        		canvas.rotate(-90);
        	}
        	if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
        	}
            canvas.rotate(-mValues[0]);
        }
        canvas.drawPath(mPath, mPaint);
	}

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {}

	@Override
	public void onSensorChanged(SensorEvent event) {
        mValues=event.values;
        invalidate();
	}
	
}

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3