dx工具 如何重写android_android dx工具 - CSDN
  • Android基础入门教程——8.3.1 三个绘图工具类详解标签(空格分隔): Android基础入门教程本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我们要学习的绘图相关的 一些API,他们...

    Android基础入门教程——8.3.1 三个绘图工具类详解

    标签(空格分隔): Android基础入门教程


    本节引言:

    上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我们要学习的绘图相关的
    一些API,他们分别是Canvas(画布),Paint(画笔),Path(路径)!本节非常重要,同时也是我们
    自定义View的基础哦~好的,话不多说开始本节内容~
    官方API文档:CanvasPaintPath


    1.相关方法详解


    1)Paint(画笔):

    就是画笔,用于设置绘制风格,如:线宽(笔触粗细),颜色,透明度和填充风格等
    直接使用无参构造方法就可以创建Paint实例:
    Paint paint = new Paint( );
    我们可以通过下述方法来设置Paint(画笔)的相关属性,另外,关于这个属性有两种,
    图形绘制相关与文本绘制相关:

    • setARGB(int a,int r,int g,int b): 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。
    • setAlpha(int a): 设置绘制图形的透明度。
    • setColor(int color): 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。
    • setAntiAlias(boolean aa): 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
    • setDither(boolean dither): 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
    • setFilterBitmap(boolean filter): 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,
      加快显示速度,本设置项依赖于dither和xfermode的设置
    • setMaskFilter(MaskFilter maskfilter): 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等
    • setColorFilter(ColorFilter colorfilter): 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果
    • setPathEffect(PathEffect effect) 设置绘制路径的效果,如点画线等
    • setShader(Shader shader): 设置图像效果,使用Shader可以绘制出各种渐变效果
    • setShadowLayer(float radius ,float dx,float dy,int color):在图形下面设置阴影层,产生阴影效果,
      radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色
    • setStyle(Paint.Style style): 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE
    • setStrokeCap(Paint.Cap cap): 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,
      如圆形样Cap.ROUND,或方形样式Cap.SQUARE
    • setSrokeJoin(Paint.Join join): 设置绘制时各图形的结合方式,如平滑效果等
    • setStrokeWidth(float width): 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度
    • setXfermode(Xfermode xfermode): 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果
    • setFakeBoldText(boolean fakeBoldText): 模拟实现粗体文字,设置在小字体上效果会非常差
    • setSubpixelText(boolean subpixelText): 设置该项为true,将有助于文本在LCD屏幕上的显示效果
    • setTextAlign(Paint.Align align): 设置绘制文字的对齐方向
    • setTextScaleX(float scaleX): 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果
    • setTextSize(float textSize): 设置绘制文字的字号大小
    • setTextSkewX(float skewX): 设置斜体文字,skewX为倾斜弧度
    • setTypeface(Typeface typeface): 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等
    • setUnderlineText(boolean underlineText): 设置带有下划线的文字效果
    • setStrikeThruText(boolean strikeThruText): 设置带有删除线的效果
    • setStrokeJoin(Paint.Join join): 设置结合处的样子,Miter:结合处为锐角,
      Round:结合处为圆弧:BEVEL:结合处为直线
    • setStrokeMiter(float miter):设置画笔倾斜度
    • setStrokeCap (Paint.Cap cap):设置转弯处的风格
      其他常用方法:
    • float ascent( ):测量baseline之上至字符最高处的距离
    • float descent():baseline之下至字符最低处的距离
    • int breakText(char[] text, int index, int count, float maxWidth, float[] measuredWidth):
      检测一行显示多少文字
    • clearShadowLayer( ):清除阴影层
      其他的自行查阅文档~

    2)Canvas(画布):

    画笔有了,接着就到画笔(Canvas),总不能凭空作画是吧~常用方法如下:

    首先是构造方法,Canvas的构造方法有两种:
    Canvas(): 创建一个空的画布,可以使用setBitmap()方法来设置绘制具体的画布。
    Canvas(Bitmap bitmap): 以bitmap对象创建一个画布,将内容都绘制在bitmap上,因此bitmap不得为null。
    接着是 1.drawXXX()方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加,
    即后面绘画的图层会覆盖前面绘画的图层。
    比如:

    • drawRect(RectF rect, Paint paint) :绘制区域,参数一为RectF一个区域
    • drawPath(Path path, Paint paint) :绘制一个路径,参数一为Path路径对象
    • drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) :
      贴图,参数一就是我们常规的Bitmap对象,参数二是源区域(这里是bitmap),
      参数三是目标区域(应该在canvas的位置和大小),参数四是Paint画刷对象,
      因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。
    • drawLine(float startX, float startY, float stopX, float stopY, Paintpaint) :
      画线,参数一起始点的x轴位置,参数二起始点的y轴位置,参数三终点的x轴水平位置,
      参数四y轴垂直位置,最后一个参数为Paint 画刷对象。
    • drawPoint(float x, float y, Paint paint):
      画点,参数一水平x轴,参数二垂直y轴,第三个参数为Paint对象。
    • drawText(String text, float x, floaty, Paint paint) :
      渲染文本,Canvas类除了上面的还可以描绘文字,参数一是String类型的文本,
      参数二x轴,参数三y轴,参数四是Paint对象。
    • drawOval(RectF oval, Paint paint):画椭圆,参数一是扫描区域,参数二为paint对象;
    • drawCircle(float cx, float cy, float radius,Paint paint): 绘制圆,参数一是中心点的x轴,参数二是中心点的y轴,参数三是半径,参数四是paint对象;
    • drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint):
      画弧,参数一是RectF对象,一个矩形区域椭圆形的界限用于定义在形状、大小、电弧,参数二是起始角
      (度)在电弧的开始,参数三扫描角(度)开始顺时针测量的,参数四是如果这是真的话,包括椭圆中心的电
      弧,并关闭它,如果它是假这将是一个弧线,参数五是Paint对象;

    2.clipXXX()方法族:在当前的画图区域裁剪(clip)出一个新的画图区域,这个画图区域就是canvas
    对象的当前画图区域了。比如:clipRect(new Rect()),那么该矩形区域就是canvas的当前画图区域
    3.save()restore()方法:
    save( ):用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作!
    restore():用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。
    save()和restore()要配对使用(restore可以比save少,但不能多),若restore调用次数比save多,会报错!
    4.translate(float dx, float dy):
    平移,将画布的坐标原点向左右方向移动x,向上下方向移动y.canvas的默认位置是在(0,0)
    5.scale(float sx, float sy):扩大,x为水平方向的放大倍数,y为竖直方向的放大倍数
    6.rotate(float degrees):旋转,angle指旋转的角度,顺时针旋转


    3)Path(路径)

    简单点说就是描点,连线~在创建好我们的Path路径后,可以调用Canvas的drawPath(path,paint)
    将图形绘制出来~常用方法如下:

    • addArc(RectF oval, float startAngle, float sweepAngle:为路径添加一个多边形
    • addCircle(float x, float y, float radius, Path.Direction dir):给path添加圆圈
    • addOval(RectF oval, Path.Direction dir):添加椭圆形
    • addRect(RectF rect, Path.Direction dir):添加一个区域
    • addRoundRect(RectF rect, float[] radii, Path.Direction dir):添加一个圆角区域
    • isEmpty():判断路径是否为空
    • transform(Matrix matrix):应用矩阵变换
    • transform(Matrix matrix, Path dst):应用矩阵变换并将结果放到新的路径中,即第二个参数。

    更高级的效果可以使用PathEffect类!
    几个To:

    • moveTo(float x, float y):不会进行绘制,只用于移动移动画笔
    • lineTo(float x, float y):用于直线绘制,默认从(0,0)开始绘制,用moveTo移动!
      比如
      mPath.lineTo(300, 300);
      canvas.drawPath(mPath, mPaint);
    • quadTo(float x1, float y1, float x2, float y2):
      用于绘制圆滑曲线,即贝塞尔曲线,同样可以结合moveTo使用!
    • rCubicTo(float x1, float y1, float x2, float y2, float x3, float y3)
      同样是用来实现贝塞尔曲线的。 (x1,y1) 为控制点,(x2,y2)为控制点,(x3,y3) 为结束点。
      Same as cubicTo, but the coordinates are considered relative to the current point
      on this contour.就是多一个控制点而已~
      绘制上述的曲线:
      mPath.moveTo(100, 500);
      mPath.cubicTo(100, 500, 300, 100, 600, 500);
      如果不加上面的那个moveTo的话:则以(0,0)为起点,(100,500)和(300,100)为控制点绘制贝塞尔曲线
    • arcTo(RectF oval, float startAngle, float sweepAngle):
      绘制弧线(实际是截取圆或椭圆的一部分)ovalRectF为椭圆的矩形,startAngle 为开始角度,
      sweepAngle 为结束角度。

    2.动手试试:

    属性那么多,肯定要手把手的撸一下,才能加深我们的映像是吧~
    嘿嘿,画图要么在View上画,要么在SurfaceView上画,这里我们在View上画吧,
    我们定义一个View类,然后再onDraw()里完成绘制工作!

    /**
     * Created by Jay on 2015/10/15 0015.
     */
    public class MyView extends View{
    
        private Paint mPaint;
    
    
        public MyView(Context context) {
            super(context);
            init();
        }
    
        public MyView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }
    
        public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init();
        }
    
        private void init(){
            mPaint = new Paint();
            mPaint.setAntiAlias(true);          //抗锯齿
            mPaint.setColor(getResources().getColor(R.color.puple));//画笔颜色
            mPaint.setStyle(Paint.Style.FILL);  //画笔风格
            mPaint.setTextSize(36);             //绘制文字大小,单位px
            mPaint.setStrokeWidth(5);           //画笔粗细
        }
    
        //重写该方法,在这里绘图
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
        }
    
    }    

    然后布局那里设置下这个View就好,下述代码都写在onDrawable中~


    1)设置画布颜色:

    canvas.drawColor(getResources().getColor(R.color.yellow));   //设置画布背景颜色

    2)绘制圆形:

    canvas.drawCircle(200, 200, 100, mPaint);           //画实心圆


    3)绘制矩形:

    canvas.drawRect(0, 0, 200, 100, mPaint);            //画矩形


    4)绘制Bitmap:

    canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher), 0, 0, mPaint);


    5)绘制弧形区域:

    canvas.drawArc(new RectF(0, 0, 100, 100),0,90,true,mPaint);  //绘制弧形区域

    假如true改为false:


    6)绘制圆角矩形

    canvas.drawRoundRect(new RectF(10,10,210,110),15,15,mPaint); //画圆角矩形


    7)绘制椭圆

    canvas.drawOval(new RectF(0,0,200,300),mPaint); //画椭圆


    8)绘制多边形:

     Path path = new Path();
     path.moveTo(10, 10); //移动到 坐标10,10
     path.lineTo(100, 50);
     path.lineTo(200,40);
     path.lineTo(300, 20);
     path.lineTo(200, 10);
     path.lineTo(100, 70);
     path.lineTo(50, 40);
     path.close();
     canvas.drawPath(path,mPaint);


    9)绘制文字:

    canvas.drawText("最喜欢看曹神日狗了~",50,50,mPaint);    //绘制文字

    你也可以沿着某条Path来绘制这些文字:

     Path path = new Path();
     path.moveTo(50,50);
     path.lineTo(100, 100);
     path.lineTo(200, 200);
     path.lineTo(300, 300);
     path.close();
     canvas.drawTextOnPath("最喜欢看曹神日狗了~", path, 50, 50, mPaint);    //绘制文字


    10)绘制自定义的图形:

    代码来源于网上:

     protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.translate(canvas.getWidth()/2, 200); //将位置移动画纸的坐标点:150,150
            canvas.drawCircle(0, 0, 100, mPaint); //画圆圈
    
            //使用path绘制路径文字
            canvas.save();
            canvas.translate(-75, -75);
            Path path = new Path();
            path.addArc(new RectF(0,0,150,150), -180, 180);
            Paint citePaint = new Paint(mPaint);
            citePaint.setTextSize(14);
            citePaint.setStrokeWidth(1);
            canvas.drawTextOnPath("绘制表盘~", path, 28, 0, citePaint);
            canvas.restore();
    
            Paint tmpPaint = new Paint(mPaint); //小刻度画笔对象
            tmpPaint.setStrokeWidth(1);
    
            float  y=100;
            int count = 60; //总刻度数
    
            for(int i=0 ; i <count ; i++){
                if(i%5 == 0){
                    canvas.drawLine(0f, y, 0, y+12f, mPaint);
                    canvas.drawText(String.valueOf(i/5+1), -4f, y+25f, tmpPaint);
    
                }else{
                    canvas.drawLine(0f, y, 0f, y +5f, tmpPaint);
                }
                canvas.rotate(360/count,0f,0f); //旋转画纸
            }
    
            //绘制指针
            tmpPaint.setColor(Color.GRAY);
            tmpPaint.setStrokeWidth(4);
            canvas.drawCircle(0, 0, 7, tmpPaint);
            tmpPaint.setStyle(Paint.Style.FILL);
            tmpPaint.setColor(Color.YELLOW);
            canvas.drawCircle(0, 0, 5, tmpPaint);
            canvas.drawLine(0, 10, 0, -65, mPaint);
        }
    


    本节小结:

    本节我们对android.graphics接口类下的三个绘图API:Canvas(画布),Paint(画笔),Path(路径)进行
    了学习,方法有很多,别去死记,用到的时候查就好,这里我们先有个大概映像即可,自定义控件那里
    我们再来慢慢纠结~好的,就说这么多,谢谢~

    展开全文
  • 前言:cocos2dx作为一个开源的移动2D游戏框架,其跨平台的特性让它备受开发公司的欢迎。这里我就不做概念性的解释了,通过这篇文章你就会了解到,它的跨平台性”是个什么样子的“---有点拟人化了 我举个比较...
    前言:cocos2dx作为一个开源的移动2D游戏框架,其跨平台的特性让它备受开发公司的欢迎。这里我就不做概念性的解释了,通过这篇文章你就会了解到,它的跨平台性”是个什么样子的“---有点拟人化了

    我举个比较形象的例子:
           有A、B、C三个部落,A部落的语言是A和O语言,B部落的语言是B和O语言,C部落的语言是C和O语言。你作为一个外星球人你会选择去学习哪种语言,让自己能够行走于各个部落之间?O语言对不对!因为学会这门语言你就可以任何一个部落中与人交流!
           回到开发中,每个部落就是一个系统平台(Android、IOS),Android开发基于java语言但同样支持C++,IOS开发基于Object-C(新推出了swift--推出第二天就有公司30w招3年经验的swift程序员,我想说:“是哪家家公司?你可以招三年后的我”)但它也支持C++,而你我都知道cocos2dx是用C++编写的,那么cocos2dx的跨平台性就是用c++写的代码稍加修改就可以在Android和IOS中编译运行。

    这就是cocos2dx的“一次编写,多平台编译运行”。注意哈:这区别于java的跨平台特性“一次编译,处处运行”(java开发的程序运行是基于JVM(虚拟机)的,不管什么平台,只要你安装了JVM,就可以运行java程序)

    这篇文章会带你走过,如何在win32平台上创建一个cocos2dx的HelloWorld程序,然后移植到Android上去(Mac平台以后再介绍)
    本人机器配置:
    win7+vs2012(用着挺爽,以前一直用vs2008,现在直接越过vs2010--它启动超慢)
    本文章开发环境:vs2012+cocos2d-x-2.2.2+Cywin+NDK+Android开发环境(在我的上一篇文章中介绍了如何搭建Android开发环境--
    http://blog.csdn.net/longming_xu/article/details/28241045,本文就不介绍了)
    学习进度表:
    1. 下载并安装vs2012(如果已安装就掠过,我在这里也不会介绍他的安装,如果你安装的其他版本也不打紧,毕竟他只是一个辅助开发的IDE而已(但很强大哦),只会在配置上有些不一致而已)
    2. 下载并安装Visual Assist X(番茄插件--因其图标是一个番茄样子,所以这么称之为番茄插件,这里我也不会介绍如何下载安装破解,自己网上去搜吧,一大堆)
    3. 下载安装python(python是一门强大的脚本语言,cocos2dx最最前身就是用python写的,这需要去看一下cocos2d的发展史。cocos2dx使用python脚本来创建新项目,后面你会看到它的创建脚本)
    4. 下载cocos2d-x-2.2.2版本
    5. 创建一个helloworld程序
    6. 下载Cygwin安装
    7. 下载NDK并安装
    8. 交叉编译项目
    9. Android开发环境搭建

    开始上菜......

    第一步:下载并安装vs2012:

    我之前做端游开发一直用的是vs2008+番茄插件,用着还不错!想当初,刚接触公司项目的时候,好家伙,代码文件多达3000了,想象一下,一个习惯了脚本开发,突然要编译这3000个文件,这是何等工程!!!!每次改一个共用头文件,( ⊙ o ⊙ )!丫的就得用我半个小时还多的时间!!!!不过还好后来接触了IncrediBuild这个联机编译工具,它对c++开发者来说简直就是”神器“。我当时在公司三台机器上安装了联机编译,好家伙!!!只用10
    分钟左右就搞定了3000多文件。vs系列+番茄插件+IncrediBuild简直是一个c/c++开发的超强组合!说到这就流口水!!....流口水????我怎么会想到这个词???vs2008---vs2010---vs2012我都安装过,个人感觉vs2010有点脆!光打开它就够我受的了,所以没几天就换上vs2012了(它的安装可是真够漫长的了)他们之间使用感受,可以上网上搜一下(也许后期我会写这么一篇文章...),我在这里假设你已经安装了vs2012开发环境了。

    第二步:下载并安装Visual Assist X

    Visual Assist X---我们都称之为番茄插件,就是因为他的图标特像番茄(就是一个番茄,对吧)
    其功能非常强大,能够提示关键字的输入,自动纠错,能够识别系统函数,用户自己定义函数和变量,为软件的开发带来了极大的方面,不仅提高了开发效率,也提高了编程的乐趣 。它是作为一个vs增强插件存在的,它让我们的编程更快捷方便。有很多小功能能够加速你的开发和纠错改错能力。(这里我假设你已经下载安装,当然你也可以选择不下载,他只是一个vs功能增强插件,没有它你一样可以用vs进行开发,只是它确实很“迷人的”,用一用就知道,别忘了破解一下...都是中国人!!)

    第三步:下载和安装python:

    python是一种面向对象、解释型计算机程序设计语言。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C++重写。我对python用的最多的就是对文件的处理和项目流程控制(打包发布啊),游戏开发中使用python脚本可以解决很多繁琐的工作,为自己项目开发节省很大一部分的时间,谁用谁知道!!!待会你就可以看到,cocos2dx如何用它来创建项目的。
    下载地址:https://www.python.org/download/releases/2.7.5/(我们下载2.7.5版本,没有为什么,因为我用的就是这个版本,3.0以上版本变动很大,一些用法都变了,好像coco2dx安装脚本不支持3.0以上版本,所以乖乖下载2.7的版本吧----有些时候并不是最新的就是最好的,你懂得)

    下载后执行python-2.7.5.msi进行安装就可以了。不要忘了在安装完成后配置环境变量哦,做程序开发如果不懂配置环境变量那么你就惨了.....
    (我的这篇文章中有介绍环境变量配置的http://blog.csdn.net/longming_xu/article/details/28241045)

    第四步:下载cocos2dx 2.2.2版本

    cocos2dx每个版本的变动都很大(如果你想了解各个版本的变化,请自行谷歌),这也是我初学的时候比较蛋疼的地方,有时候就纳闷为什么cocos2dx不搞一个像unity3D那样的集成开发环境呢?每个版本的变动,竟然连工程创建方式都不一样,让我们情以何堪啊(3.0版本变动据说挺大的来...)!!!在这里我只介绍2.2.2版本的工程创建,其他版本自行谷歌喽(因为这不是本文的主要内容,如果有需要的话,可以考虑后续补充)。
    下载地址:http://www.cocos2d-x.org/download/version#Cocos2d-x找到v2.2.2版本(现在都出到v3.1.1了)


    OK!到这里你已经拥有了基本的开发环境(IDE(vs2012+番茄插件)+cocos2dx开发库),可以进行coco2dx开发了,下面我们就创建一个Helloworld程序吧。

    第五步:创建一个Helloworld程序:

    1、解压zip文件

    2、解压后的文件结构是这个样子的(介绍组织结构的文章,自行谷歌)

    3、如何创建一个项目呢?cocos2dx已经为我们提供了创建项目的工具,他是一个python脚本文件(所以你需要安装python环境)
    ①看见上图红框tools文件夹了吗,打开它进入project-creator目录下,红框就是项目创建脚本了(你不需要知道他是怎么实现的--如果你愿意的话你可以了解下):


    ②点击当前目录空白处,然后按shift+右键,选择-->在此处打开命令行窗口

    ③打开命令行,然后输入create_project.py后回车,出现提示喽,他会告诉你你需要传递的参数信息:
    -project 是新建项目名称
    -package 是java方式的包结构(这个是为了android移植而设定的)
    -language 是你的项目所使用的开发语言(cpp即c++,lua,javascript三种)


    ################################################################################################################33
    小提示:你可以自己编写一个bat小脚本命名为createProject.bat,使用的时候直接运行就可以了(调用了createProject.py)
    @echo off
    set /p projectName=请输入项目名称:
    if "%projectName%"=="" goto inputError1
    set /p packageName=请输入包标示名:
    if "%packageName%"=="" goto inputError2
    set /p language=请输入语言:
    if "%language%"=="" goto inputError3
    create_project.py -project %projectName% -package %packageName% -language %language%
    pause
    exit
    :inputError1
    @echo 项目名称不能为空!
    :inputError2
    @echo 包标示名不能为空!
    :inputError3
    @echo 选择语言不能为空!
    pause 



    ##############################################################################################################

    ④然后我们按照提示创建我们的新项目,如下图红框1内容。执行后如果出现了Done!说明你创建完毕了!红框2指出了创建项目的位置。

    ⑤那么我们进入项目文件夹project中,你会发现刚才新建的项目helloworld了

    ⑥进入项目中,其文件组织结构如下图,这样一个coco2dx的新项目就完成了。
    Classes文件夹中是项目的代码位置
    proj.开头的文件夹是各个平台的入口实现方式
    Resource文件夹是资源文件位置

    ⑦让我们编译运行一下吧,进入proj.win32中,双击helloworld.sln解决方案文件,打开vs2012,执行编译运行(不用多说了)

    ⑧看结果吧,当当当当....大功告成!(这样我们就可以在win32平台下进行开发了---尽情地蹂躏cocos2dx吧)


    到目前为止,我们已经学会了如何创建cocos2dx项目了,并吧helloworld程序跑起来了,可以进行win32开发了,那么下一步我们就是要将这个项目交叉编译到Android上了,下面你就会见识到cocos2dx的跨平台性了。
    这里插入一点小介绍:
    编写的c++代码为什么能在Android上运行?其实这是使用了java的jniJava Native Interface --java本地调用)技术,jni技术允许Java代码和其他语言写的代码(c/c++)进行交互。
    百科:众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必须使用Java语言。但这并不等同于“第三方应用只能使用Java”。在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C/C++”的编程方式是可以实现的。(下面将要用的NDK其实就是采用了jni技术,对它简化了而已)


    第六步:下载Cygwin安装

    首先你会问Cygwin是什么东东对吧,其实他是一个UNIX 模拟环境,它让你可以在window下运行UNIX 环境,而不需要安装虚拟机!它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对Cygwin产生了兴趣。说白了它就是一个小linux系统(模拟的),在Cygwin中你可以使用绝大部分Linux软件和功能。如Gcc,Make,Vim,Emacs等等。总之如果你想使用某个Linux下的功能,而windows上又找不到好的替代品的话,你就可以用Cygwin。使用的最频繁的是Gcc和Make。经常会用它们来编译一些我从网上下载的开源的工程。这些工程在Windows上编译往往很麻烦。


    它的安装教程我就不写了,得配好多图....
    我就先“盗用”别人的链接了供大家参考一下:

    注意:安装组件过程中,必须安装的GUN MAKE组件,需要用来编译c/c++文件。对linux不熟悉的话直接全部安装Devel目录下的所有组件即可。也可以下载平台的组件包到本地,从本地安装,具体看你选择哪种方式了。安装完成,打开会出现一个linux shell的命令行窗口,测试GNU MAKE版本:make -v ,窗口显示gnu make 版本号即表示安装成功,然后你就可以模拟linux操作了。 

    那么为什么要安装它呢?这就与下面我们安装的NDK(Native Development Kit 本地开发工具包)有关系了!!由于NDK(注意:NDK r7版本和之后版本自带了一个编译器,就不需要Cygwin了)编译代码时必须要用到make和gcc,所以你必须先搭建一个linux环境, cygwin是一个在windows平台上运行的unix模拟环境,通过它,你就可以在不安装linux的情况下使用NDK来编译C、C++代码了。



    第七步:下载NDK并安装

    那么什么事NDK呢?NDK全称Native Development Kit 本地开发包。
    百科:
    NDK是一系列工具的集合------
    ①NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。
    ②NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。
    ③NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。

    如果你下载的是NDK r7之前的版本,那么你会发现都会提到Cygwin下载(以提供make 和 gcc的MinGNU环境)。NDK r7和之后的版本都自带了编译器,就不需要下载Cygwin了。(这里我不管是哪个版本,都用Cygwin去做交叉编译,就当做是学习Cygwin了,后面会介绍直接使用NDK r7自带的编译器,不使用Cygwin)

    下载地址:



    1、下载完成后获得一个压缩包,解压到指定文件夹就可以了,我解压到了之前搭建Android时的SDK同级目录下了D:\Android下


    2、解压完成后,不要忘了配置一下NDK的系统环境变量!!!!



    到此为止,Cygwin+NDK下载安装完毕!!!!那么如何使用他们进行交叉编译?

    第八步:交叉编译项目

    1、进入cygwin/home/计算机名下,打开.bash_profile

    2、在.bash_profile文件最后添加如下内容:
    #ndk的根路径
    NDK_ROOT=/cygdrive/d/Android/android-ndk-r9d
    export NDK_ROOT

    #cocos2dx的根路径
    COCOS2DX_ROOT=/cygdrive/g/projects-cocos2dx/cocos2d-x-2.2.2
    export COCOS2DX_ROOT

    小知识:bash中export命令----将一个bash局部变量变成一个bash全局变量

    3、现在你可以打开Cygwin终端,执行如下命令
    cd $NDK_ROOT
    cd $COCOS2DX_ROOT
    出现下图输出即配置成功了,你可以直接使用这些变量了(为什么要配置这些变量,下面我会解释原因!!!!)

    4、进入cocos2dx中的proj.android\jni修改Android.mk文件(在红框内容处增加你所要编译的文件路径,helloworld示例程序只有以下三个)

    5、 进入cocos2dx中的proj.android,执行build_native.sh文件

    6、然后耐心等待编译完成吧!!会花费几分钟吧!!编译完成后,会出现如下界面,并在proj.android\libs\armeabi\下生成so文件(binggo!!交叉编译成功!)


    ####################################################################################
    补充介绍:上面第二步配置Cygwin的.bash_profile文件时的NDK_ROOT和COCOS2DX_ROOT有什么用呢?你又没有注意到你执行build_native.sh的时候会打印一些信息,我们看一下build_native.sh脚本内容!!
    红框1---判断NDK_ROOT变量是否定义了;(这就是我们配置了NDK_ROOT的原因)
    红框2--获取当前执行的bash脚本的路径;
    红框3--打印相关路径信息;
    红框4--新创建一个assets资源文件夹,拷贝Resources下资源到assets中!
    熟悉bash的人应该不难理解它。

    ####################################################################################

    第九步:Android开发环境搭建

    (我的上一篇文章 http://blog.csdn.net/longming_xu/article/details/28241045 详细介绍过了,就不再赘述了,直接使用就可以了!)
    我们的交叉编译工作已经搞定了,最后就是生成apk,在Android手机上测试了。

    1、首先打开eclipse,然后File----New-----Project--从已有的代码创建一个项目---next

    2、导入helloworld项目地址,执行Finish

    3、创建新项目目录结构如下图,你会发现他报错了,说没有导入包org.cocos2dx!!!

    4、解决办法有两种:
    一种是拷贝\cocos2d-x-2.2.2\cocos2dx\platform\android\java\src下的org文件夹到\cocos2d-x-2.2.2\projects\helloworld\proj.android\src中,刷新一下项目,错误消失

    另一种是直接新创建一个项目把java的库作为lib方式加入进来(cocos2dx自行配置了此方式),添加完成后,错误消失


    5、右键helloworld---properties,修改如下图(android目标版本),同理libcocos2dx---properties(不过需要指定他为lib)


    6、ok了,没有任何错误了,右键helloworld项目,执行一下吧run as...

    这样你就在cocos2d-x-2.2.2\projects\helloworld\proj.android\bin下生成一个android的apk文件了,可以安装到android手机上了!!!!(你也可以用AVD模拟器测试一下,不过它一般反应比较慢,建议真机测试!!)




    ok了!cocos2dx的交叉编译到Android上完成了。我们总结一下吧!
    1、首先你要下载安装vs2012+番茄插件----这样你就可以进行c++开发了
    2、下载安装python----创建cocos2dx的新项目时候需要用到
    3、下载cocos2d-x-2.2.2版本,解压即可---我们进行游戏开发的2d游戏开源框架
    4、然后我们介绍了利用上面的各种工具如何创建一个helloworld程序
    5、下载安装cygwin和NDK(r7以后就不需要cygwin了,它自带了一个编译器)
    6、进行交叉编译项目(就是在cygwin下执行proj.android文件夹下的一个脚本:里面配置好了各种信息。在执行脚本之前不要忘了配置一下jni文件夹下的mk文件哦)编译完毕会生成一个so文件。小提示:什么是mk文件?什么是so文件?android的东西,可以去了解一下,我没去了解过!
    7、最后一步就是在eclipse中导入该项目,编译生成apk了!!!!完事你就可以部署到手机上了!


    建议:如果想要了解这些的原理,可以学习一下android项目开发(jni技术、ndk的使用、cygwin的使用、bash的语法啊),了解了这些你应该就会觉得交叉编译到android上其实不难

    总算是写完了,有了上一次写博客的经验,这次尽量写的不那么啰嗦!可是依然稍显啰嗦......希望大家不要介意,只是想要写的让大家明白些。大家如有有什么疑问可以回复给我,我会及时给大家解决!同时欢迎大家批评指正哦。

    本博客只介绍方式一:cygwin+NDK,那么方式二呢?NDK r7版本之后就不需要cygwin了,因为它自带了一个小编译器!!!配置一下eclipse即可(待续)

    展开全文
  • Android SDK是什么

    2020-05-11 21:29:38
    AndroidSDK 就是 Android 专属的软件开发工具包。 Android SDK 目录结构 Android SDK 解压即可完成安装,其中包含的文件、文件夹如图 1 所示。 图 1 Android SDK 目录结构图 1) add-ons 该目录中存放 Android ...

    SDK (Software Development Kit) 软件开发工具包是软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合Android SDK 就是 Android 专属的软件开发工具包。

    Android SDK 目录结构

    Android SDK 解压即可完成安装,其中包含的文件、文件夹如图 1 所示。


    图 1  Android SDK 目录结构图

    1) add-ons

    该目录中存放 Android 的扩展库,比如 Google Maps,但若未选择安装 Google API,则该目录为空。

    2) docs

    该目录是 developer.Android.com 的开发文档,包含 SDK 平台、工具、ADT 等的介绍,开发指南,API 文档,相关资源等。

    3) extras

    该目录用于存放 Android 附加支持文件,主要包含 Android 的 support 支持包、Google 的几个工具和驱动、Intel 的 IntelHaxm。

    4) platforms

    该目录用于存放 Android SDK Platforms 平台相关文件,包括字体、res 资源、模板等。

    5) platform-tools

    该目录包含各个平台工具,其中主要包含以下几部分。

    名称 作用
    api 目录 api-versions.xml 文件,用于指明所需类的属性、方法、接口等
    lib 目录 目录中只有 dx.jar 文件,为平台工具启动 dx.bat 时加载并使用 jar 包里的类
    aapt.exe 把开发的应用打包成 APK 安装文件,如果用 Eclipse 开发,就不用通过命令窗口输入命令+参数实现打包
    adb.exe (Android Debug Bridge 调试桥) 通过它连接 Android 手机(或模拟器)与 PC 端,可以在 PC 端上控制手机的操作。如果用 Eclipse 开发,一般情况 下 ADB 会自动启动,之后我们可以通过 DDMS 来调试 Android 程序。
    aidl.exe (Android Interface Definition Language) Android 内部进程通信接口的描述语言,用于生成可以在 Android 设备进行进程间通信 (Inter-Process Communication,IPC) 的代码
    dexdump.exe 可以反编译 .dex 文件,例如 .dex 文件里包含 3 个类,反编译后也会出现 3 个 .class 文件,通过这些文件可以大概了解原始的 Java 代码。(dump是转储的意思)
    dx.bat 将 .class 字节码文件转成 Android 字节码 .dex 文件
    fastboot.exe 可以进行重启系统、重写内核、查看连接设备、写分区、清空分区等操作
    Android llvm-rs-cc.exe Renderscript 采用 LLVM 低阶虚拟机,llvm-rs-cc.exe 的主要作用是对 Renderscript 的处理
    NOTICE.txt 和 source.properties NOTICE.txt 只是给出一些提示的信息;source.properties 是资源属性信息文件,主要显示该资源生成时间、系统类型、资源 URL 地址等。

    6) samples

    samples 是 Android SDK 自带的默认示例工程,里面的 apidemos 强烈推荐初学者学习。

    7) system-images

    该目录存放系统用到的所有图片。

    8) temp

    该目录存放系统中的临时文件。

    9) tools

    作为 SDK 根目录下的 tools 文件夹,这里包含重要的工具,比如 ddms 用于启动 Android 调试工具,如 logcat、屏幕截图和文件管理器;而 draw9patch 则是绘制 Android 平台的可缩放 PNG 图片的工具;sqlite3 可以在 PC 上操作 SQLite 数据库;而 monkeyrunner 则是一个不错的压力测试应用,模拟用户随机按钮;mksdcard 是模拟器 SD 映像的创建工具;emulator 是 Android 模拟器主程序,不过从 Android 1.5 开始,需要输入合适的参数才能启动模拟器;traceview 是 Android 平台上重要的调试工具。 

    Android.jar

    作为一个 Java 项目,通常情况下都会引入要用到的工具类,也就是 JAR 包。

    在 Android 开发中,绝大部分开发用的工具包都被封装到一个名叫 Android.jar 的文件里了。在 Eclipse 中展开来看,可以看到 J2SE 中的包、Apache 项目中的包,还有 Android 自身的包文件。Android 的包文件主要包括以下内容: 

    名称 作用
    Android.app 提供高层的程序模型和基本的运行环境
    Android.content 包含各种对设备上的数据进行访问和发布的类
    Android.database 通过内容提供者浏览和操作数据库
    Android.graphics 底层的图形库
    Android.location 定位和相关服务的类
    Android.media 提供一些类管理多种音频、视频的媒体接口
    Android.net 提供帮助网络访问的类,超过通常的 java.net.* 接口
    Android.os 提供系统服务、消息传输、IPC 机制
    Android.openg 提供 OpenGL 的工具
    Android.provider 提供类,访问 Android 的内容提供者
    Android.telephony 提供与拨打电话相关的 API 交互
    Android.view 提供基础的用户界面接口框架
    Android.util 涉及工具性的方法,例如时间日期的操作
    Android.webkit 默认浏览器操作接口
    Android.widget 包含各种 UI 元素(大部分是可见的)在应用程序的屏幕中使用

    Android API 扩展包

    核心的 Android API 在每部手机上都可以使用,但仍然有一些 API 接口有各自特别的适用范围,这就是所谓的“可选API”。这些 API 之所以是“可选的”,主要是因为一个手持设备并不一定要完全支持这类 API,甚至可以完全不支持。

    1) Location-Based Services(定位服务)

    Android 操作系统支持 GPS API-LBS,可以通过集成 GPS 芯片来接收卫星信号,通过 GPS 全球定位系统中至少 3 颗卫星和原子钟来获取当前手机的坐标数据,通过转换就可以成为地图上的具体位置,这一误差在手机上可以缩小到 10 米。在谷歌开发手机联盟中可以看到著名的 SiRF star。所以未来 gPhone 手机上市时集成 GPS 后的价格不会很贵。

    同时,谷歌正在研制基于基站式的定位技术——MyLocation,可以更快速地定位,与前者 GPS 定位需要花费大约 1 分钟相比,基站定位更快。

    2) Media APIs(多媒体接口)

    Android 平台上集成了很多影音解码器以及相关的多媒体 API,通过这些可选 API,厂商可以让手机支持 MP3、MP4、高清晰视频播放处理等。

    3) 3D Graphics with OpenGL(3D 图形处理 OpenGL)

    可选 API。Android 平台上的游戏娱乐功能,如支持 3D 游戏或应用场景就需要用到 3D 技术,手机生产厂商根据手机的屏幕以及定位集成不同等级的 3D 加速图形芯片来加强 gPhone 手机的娱乐性,有来自高通的消息称,最新的显示芯片在 gPhone 上将会轻松超过索尼 PS3。

    4) Low-Level Hardware Access(低级硬件访问)

    这个功能主要用于控制手机的底层方面操作,设计底层硬件操作将主要由各个手机硬件生产厂商来定制,支持不同设备的操作管理,如蓝牙 (Bluetooth) 以及 WIFI 无线网络支持等。

    展开全文
  • android反混淆工具

    2016-01-26 17:36:07
    安装:步骤一. 安装Smali / Baksmali我确定如果你是安卓逆向精英,那你的路径中肯定已经有smali和baksmali了。步骤二. 安装安卓 SDK / ADB确保你的路径中有adb。步骤三....或者,你也可以选择使用这种方式获得源: ...

    安装:

    步骤一. 安装Smali / Baksmali

    我确定如果你是安卓逆向精英,那你的路径中肯定已经有smali和baksmali了。

    步骤二. 安装安卓 SDK / ADB

    确保你的路径中有adb。

    步骤三. 安装Gem

    gem install dex-oracle
    或者,你也可以选择使用这种方式获得源:
    git clone https://github.com/CalebFenton/dex-oracle.git
    cd dex-oracle
    gem install bundler
    bundle install

    步骤四. 连接设备或者模拟器

    你必须有一个模拟器运行或者一个接入Oracle能够工作的设备。
    Oracle需要在一个live的安卓系统上执行方法。你可以选择真正的安卓设备,也可以选择模拟器(推荐)。如果你选择了真正的安卓设备,确保你不介意在上面运行潜在的恶意代码。
    如果你更喜欢使用模拟器,并且已经安装了Android SDK,你可以创建并启动模拟器,如图:
    android avd

    用法

    Usage: dex-oracle [opts]
    -h, –help 显示屏幕
    -s ANDROID_SERIAL, 执行驱动的设备ID, default=””

    –specific-device
    -t, –timeout N ADB 命令执行超时, default=”120″
    -i, –include PATTERN 仅仅是优化方法和类匹配模式, e.g. Ldune;->melange()V
    -e, –exclude PATTERN 从优化中排除这些类型,包括重写
    –disable-plugins STRING[,STRING]*
    禁用插件, e.g. stringdecryptor,unreflector
    –list-plugins 列出可用插件
    -v, –verbose 详细内容
    -V, –vverbose 非常详细的内容
    举个例子,对于在一个类里面的唯一的deobfuscate方法调用Lcom/android/system/admin/CCOIoll,而不是一个APK调用obad.apk;

    dex-oracle -i com/android/system/admin/CCOIoll obad.apk

    如何运行

    Oracle把Android app(APK), Dalvik可执行文件(DEX)和Smali文件作为输入源。第一,如果输入源是一个APK或者DEX,它会被分解成很多个Smali文件。然后,这个Smali文件会被传递给很多执行粉丝和修改的插件。插件搜索能够被转化为更易读的模式。为了了解代码做了什么工作,一些Dalvik方法真的被执行了,然后我们收集了输出。这样,一些方法调用可以被替换为常量。之后,所有的Smali文件都被更新了。最后,如果输入是一个APK或者一个DEX文件,被修改的Smali文件会被重新编译,一个已更新的APK或者DEX就被创建了。

    方法执行是被驱动执行的。输入APK, DEX或者Smali都被和驱动混合进了一个使用dexmerge的DEX,然后被压入了一个安卓设备或者安卓模拟器。无论插件是否请求,Oracle之后都会发送方法执行信息到驱动。驱动程序在自己的DEX使用Oracle提供的参数使用Java反射来执行方法,结果返回任何输出或异常。这种方法对于很多字符串解密方法都非常有用,通常情况下,使用加密字符串或者一些one limitation都是执行是限制的静态方法。

    攻击

    1. 创建自己的插件

    这里有三个带有Oracle的插件:
    Undexguard – 删除某些特定类型的Dexguard混淆
    Unreflector – 删除某些Java反射
    String Decryptor – 简单的能够删除一些常见加密字符串的插件
    如果你遇到一类新的混淆,它可能会用Oracle反混淆。查看Smali并找出是否代码可以这样:

    1. 重新排列

    2. 执行一些静态方法理解

    以上任何一种情况,你都应该尝试并写出你自己的插件。下面的四个步骤教你如何创建自己的插件:

    1. 确定Smali模式

    2. 搞清楚如何简化模式

    3. 搞清楚如何与驱动交互并调用方法

    4. 搞清楚如何直接应用修改

    这里包含的插件应该是理解步骤3、4的很好的指导。驱动被设计帮助步骤2 。

    当然,我们非常欢迎你分享任何你遇到的混淆。
    更新驱动程序
    首先,确保DX在你的路径上。这是Android SDK的一部分,但是它可能不在你的路径上,除非你是硬核。
    驱动程序文件夹是一个由Gradle管理的Java项目。将它导入Eclipse,IntelliJ等,然后进行修改。为了完成驱动的更新,运行./update_driver。这将重建驱动并转换输入JAR进入一个DEX。

    展开全文
  • 这几天在弄android ...而开发工具,ios有XCode,windowPhone有Visio Studio 2015,但是作为市场份额最高的android却没有一套像样的开发工具。ec只是一个插件,需要集成sdk,ADT等开发环境,所以谷歌全力推出as作为a

    这几天在弄android studio,其实我早就知道as是大势所趋。。。我听elipse_xu讲的课说了,移动开发分为,android,ios,windowPhone。而开发工具,ios有XCode,windowPhone有Visio Studio 2015,但是作为市场份额最高的android却没有一套像样的开发工具。ec只是一个插件,需要集成sdk,ADT等开发环境,所以谷歌全力推出as作为android开发的不二工具,但是作为初恋的eclipse还是久久难以放下。作为小白,as的横空出世,我并不觉得热血沸腾,我还是继续码我该码的代码,入不了门,真就觉得难用了。前几天用as2.2更新sdk,意外地发现迅猛了不少,不知道是不是不用翻墙了,索性,就用就用studio更新的sdk也能让eclipse爽一把。。。本来都是顺风顺水的,但是到了后期,更新到android24的时候,有问题了,as提示不能只用jdk1.7了,而是要用jdk1.8了,而且带来的是ec中的项目不能运行了,一下子整个人都不好了。百度了,发现了问题,升级了高版本的sdk导致jdk编译的版本提高,解决的方法无非就是升级jdk到1.8或者还原你的sdk版本(把platform和buildtool里高版本大于23的删了)。

    错误描述

    1、升级jdk1.8,不用去sun公司下载,已经被oracle收并了,下载链接http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,可能下载完后,你的eclipse版本过低,不支持jdk1.8。。。。那么你就只能再次更新elipse了,去下载最新的elipse,4.4以上就行。我想这也是为什么不用elipse的一个原因,已经不支持了。

    2、删除高版本的sdk,在sdk文件夹中把platform和buildtool里高版本大于23的删了就可以了。所以,我果断给ec配了一个低版本的sdk,所以,as和ec的sdk还是不要公用了,这才回想起来别人说的最好不要公用sdk是什么意思了。

    番外篇:又出现一个BUG,由于编程开发的习惯,总会用genymotion,对吧。。。可是就是出错了。。。

    错误描述

    这个错误一般第一反应就是adb端口被占用了,然后看看你的酷狗音乐是否开了,如果开了,必定冲突,再就是一些手机助手类是否启用了。。。可是都不是。。。然后我就想度娘啊,度出了一个利用DOS系统过滤端口号为“5037”的adb,看它的进程号,利用任务管理器手动杀死的方法。附上:
    具体就是先到DOS系统下:首先执行adb kill-server,再执行adb start-server。如果你执行adb start-server后会发现启动不起来,那么说明adb的端口被占用了。然后可以输入netstat -aon|findstr “5037”,可以看到正在占用5037端口的进程了。然后启动任务管理器,结束掉这个进程。

    这里写图片描述

    需要记住的就是,需要在任务管理器中点击“查看”->“选择列”—>把PID给勾上,然后你才可以看到对应PID的进程了,选择结束进程即可。

    这里写图片描述

    可是还是不行。。。最后知道了是我给配了as单独配了一份sdk留下的问题。。是和genymotion冲突了,需要在genymotion的设置->ADB里面,选择as对应的本地sdk目录就可以了。。。然后就可以了。。。奥耶,说明对genymotion还是要了解些的好

    这里写图片描述

    总结:仍然记得,去年去面试的时候,说不会用as的不要。所以,我深深觉得这就算是个坑,我也要跳地义无反顾,更何况,as还是挺好用的。作为小白,我觉得,ec作为一个插件开发工具,ec有的功能as都有,as有的ec就不一定有了。最别扭的莫过于一些快捷键的使用了。。。。所以,附上

    最后,附上as的一些常见的快捷键:

    Alt+回车 导入包,自动修正
    Ctrl+N 查找类
    Ctrl+Shift+N 查找文件
    Ctrl+Alt+L 格式化代码
    Ctrl+Alt+O 优化导入的类和包
    Alt+Insert 生成代码(如get,set方法,构造函数等)
    Ctrl+E或者Alt+Shift+C 最近更改的代码
    Ctrl+R 替换文本
    Ctrl+F 查找文本
    Ctrl+Shift+Space 自动补全代码
    Ctrl+空格 代码提示
    Ctrl+Alt+Space 类名或接口名提示
    Ctrl+P 方法参数提示
    Ctrl+Shift+Alt+N 查找类中的方法或变量
    Alt+Shift+C 对比最近修改的代码

    Shift+F6 重构-重命名
    Ctrl+Shift+先上键
    Ctrl+X 删除行
    Ctrl+D 复制行
    Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者 )
    Ctrl+J 自动代码
    Ctrl+E 最近打开的文件
    Ctrl+H 显示类结构图
    Ctrl+Q 显示注释文档
    Alt+F1 查找代码所在位置
    Alt+1 快速打开或隐藏工程面板
    Ctrl+Alt+ left/right 返回至上次浏览的位置
    Alt+ left/right 切换代码视图
    Alt+ Up/Down 在方法间快速移动定位
    Ctrl+Shift+Up/Down 代码向上/下移动。
    F2 或Shift+F2 高亮错误或警告快速定位

    代码标签输入完成后,按Tab,生成代码。
    选中文本,按Ctrl+Shift+F7 ,高亮显示所有该文本,按Esc高亮消失。
    Ctrl+W 选中代码,连续按会有其他效果
    选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。
    Ctrl+Up/Down 光标跳转到第一行或最后一行下
    Ctrl+B 快速打开光标处的类或方法
    最常用快捷键
    1.Ctrl+E,可以显示最近编辑的文件列表
    2.Shift+Click可以关闭文件
    3.Ctrl+[或]可以跳到大括号的开头结尾
    4.Ctrl+Shift+Backspace可以跳转到上次编辑的地方
    5.Ctrl+F12,可以显示当前文件的结构
    6.Ctrl+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择
    7.Ctrl+N,可以快速打开类
    8.Ctrl+Shift+N,可以快速打开文件
    9.Alt+Q可以看到当前方法的声明
    10.Ctrl+W可以选择单词继而语句继而行继而函数
    11.Alt+F1可以将正在编辑的元素在各个面板中定位
    12.Ctrl+P,可以显示参数信息
    13.Ctrl+Shift+Insert可以选择剪贴板内容并插入
    14.Alt+Insert可以生成构造器/Getter/Setter等
    15.Ctrl+Alt+V 可以引入变量。例如把括号内的SQL赋成一个变量
    16.Ctrl+Alt+T可以把代码包在一块内,例如try/catch
    17.Alt+Up and Alt+Down可在方法间快速移动
    下面的不是很有用
    18.在一些地方按Alt+Enter可以得到一些Intention Action,例如将”==”改为”equals()”
    19.Ctrl+Shift+Alt+N可以快速打开符号
    20.Ctrl+Shift+Space在很多时候都能够给出Smart提示
    21.Alt+F3可以快速寻找
    22.Ctrl+/和Ctrl+Shift+/可以注释代码
    23.Ctrl+Alt+B可以跳转到抽象方法的实现
    24.Ctrl+O可以选择父类的方法进行重写
    25.Ctrl+Q可以看JavaDoc
    26.Ctrl+Alt+Space是类名自动完成
    27.快速打开类/文件/符号时,可以使用通配符,也可以使用缩写
    28.Live Templates! Ctrl+J
    29.Ctrl+Shift+F7可以高亮当前元素在当前文件中的使用
    30.Ctrl+Alt+Up /Ctrl+Alt+Down可以快速跳转搜索结果
    31.Ctrl+Shift+J可以整合两行
    32.Alt+F8是计算变量值

    IntelliJ IDEA使用技巧一览表
    在使用 InelliJ IDEA 的过程中,通过查找资料以及一些自己的摸索,发现这个众多 Java 程序员喜欢的 IDE 里有许多值得一提的小窍门,如果能熟练的将它们应用于实际开发过程中,相信它会大大节省你的开发时间,而且随之而来的还会有那么一点点成就感:) Try it !

    1 、写代码时用 Alt-Insert ( Code|Generate… )可以创建类里面任何字段的 getter 与 setter 方法。

    2 、右键点击断点标记(在文本的左边栏里)激活速查菜单,你可以快速设置 enable/disable 断点或者条件它的属性。

    3 、 CodeCompletion (代码完成)属性里的一个特殊的变量是,激活 Ctrl-Alt-Space 可以完成在或不在当前文件里的类名。如果类没有引入则 import 标志会自动创建。

    4 、使用 Ctrl-Shift-V 快捷键可以将最近使用的剪贴板内容选择插入到文本。使用时系统会弹出一个含有剪贴内容的对话框,从中你可以选择你要粘贴的部分。

    5 、利用 CodeCompletion (代码完成)属性可以快速地在代码中完成各种不同地语句,方法是先键入一个类名地前几个字母然后再用 Ctrl-Space 完成全称。如果有多个选项,它们会列在速查列表里。

    6 、用 Ctrl-/ 与 Ctrl-Shift-/ 来注释 / 反注释代码行与代码块。

    -/ 用单行注释标记(“ //… ”)来注释 / 反注释当前行或者选择地代码块。而 Ctrl-Shift-/ 则可以用块注释标记(“ ”)把所选块包围起来。要反注释一个代码块就在块中任何一个地方按 Ctrl-Shift-/ 即可。

    7 、按 Alt-Q ( View|Context Info )可以不需要移动代码就能查看当前方法地声明。连续按两次会显示当前所编辑的类名。

    8 、使用 Refactor|Copy Class… 可以创建一个所选择的类的“副本”。这一点很有用,比如,在你想要创建一个大部分内容都和已存在类相同的类时。

    9 、在编辑器里 Ctrl-D 可以复制选择的块或者没有所选块是的当前行。

    10 、 Ctrl-W (选择字)在编辑器里的功能是先选择脱字符处的单词,然后选择源代码的扩展区域。举例来说,先选择一个方法名,然后是调用这个方法的表达式,然后是整个语句,然后包容块,等等。

    11 、如果你不想让指示事件细节的“亮球”图标在编辑器上显示,通过按 Alt-Enter 组合键打开所有事件列表然后用鼠标点击它就可以把这个事件文本附件的亮球置成非活动状态。

    这样以后就不会有指示特殊事件的亮球出现了,但是你仍然可以用 Alt-Enter 快捷键使用它。

    12 、在使用 CodeCompletion 时,可以用逗点( . )字符,逗号(,)分号(;),空格和其它字符输入弹出列表里的当前高亮部分。选择的名字会随着输入的字符自动输入到编辑器里。

    13 、在任何工具窗口里使用 Escape 键都可以把焦点移到编辑器上。

    Shift-Escape 不仅可以把焦点移到编辑器上而且还可以隐藏当前(或最后活动的)工具窗口。

    F12 键把焦点从编辑器移到最近使用的工具窗口。

    14 、在调试程序时查看任何表达式值的一个容易的方法就是在编辑器中选择文本(可以按几次 Ctrl-W 组合键更有效地执行这个操作)然后按 Alt-F8 。

    15 、要打开编辑器脱字符处使用的类或者方法 Java 文档的浏览器,就按 Shift-F1 (右键菜单的 External JavaDoc )。

    要使用这个功能须要把加入浏览器的路径,在“ General ”选项中设置( Options | IDE Settings ),另外还要把创建的 Java 文档加入到工程中( File | Project Properties )。

    16 、用 Ctrl-F12 ( View | File Structure Popup )键你可以在当前编辑的文件中快速导航。

    这时它会显示当前类的成员列表。选中一个要导航的元素然后按 Enter 键或 F4 键。要轻松地定位到列表中的一个条目,只需键入它的名字即可。

    17 、在代码中把光标置于标记符或者它的检查点上再按 Alt-F7 (右键菜单中的 Find Usages… )会很快地查找到在整个工程中使用地某一个类、方法或者变量的位置。

    18 、按 Ctrl-N ( Go to | Class… )再键入类的名字可以快速地在编辑器里打开任何一个类。从显示出来的下拉列表里选择类。
    同样的方法你可以通过使用 Ctrl-Shift-N ( Go to | File… )打开工程中的非 Java 文件。

    19 、要导航代码中一些地方使用到的类、方法或者变量的声明,把光标放在查看项上再按 Ctrl-B 即可。也可以通过按 Ctrl 键的同时在查看点上单击鼠标键调转到声明处。

    20 、把光标放到查看点上再按 Ctrl-Alt-B 可以导航到一个抽象方法的实现代码。

    21 、要看一个所选择的类的继承层次,按 Ctrl-H ( Browse Type Hierarchy )即可。也可以激活编辑器中的继承关系视图查看当前编辑类的继承关系。22 、使用 Ctrl-Shift-F7 ( Search | Highlight Usages in File )可以快速高亮显示当前文件中某一变量的使用地方。按 Escape 清除高亮显示。

    23 、用 Alt-F3 ( Search | Incremental Search )在编辑器中实现快速查查找功能。

    在“ Search for: ”提示工具里输入字符,使用箭头键朝前和朝后搜索。按 Escape 退出。

    24 、按 Ctrl-J 组合键来执行一些你记不起来的 Live Template 缩写。比如,键“ it ”然后按 Ctrl-J 看看有什么发生。

    25 、 Introduce Variable 整合帮助你简化代码中复杂的声明。举个例子,在下面的代码片断里,在代码中选择一个表达式:然后按 Ctrl-Alt-V 。

    26 、 Ctrl-Shift-J 快捷键把两行合成一行并把不必要的空格去掉以匹配你的代码格式。

    27 、 Ctrl-Shift-Backspace ( Go to | Last Edit Location )让你调转到代码中所做改变的最后一个地方。

    多按几次 Ctrl-Shift-Backspace 查看更深的修改历史。

    28 、用 Tools | Reformat Code… 根据你的代码样式参考(查看 Options | IDE Setting | Code Style )格式化代码。

    使用 Tools | Optimize Imports… 可以根据设置(查看 Options | IDE Setting | Code Style | Imports )自动“优化” imports (清除无用的 imports 等)。

    29 、使用 IDEA 的 Live Templates | Live Templates 让你在眨眼间创建许多典型代码。比如,在一个方法里键入

    再按 Tab 键看有什么事情发生了。
    用 Tab 键在不同的模板域内移动。查看 Options | Live Templates 获取更多的细节。

    30 、要查看一个文件中修改的本地历史,激活右键菜单里的 Local VCS | Show History… 。也许你可以导航不同的文件版本,看看它们的不同之处再回滚到以前的任何一个版本吧。

    使用同样的右键菜单条目还可以看到一个目录里修改的历史。有了这个特性你就不会丢失任何代码了。

    31 、如果要了解主菜单里每一个条目的用途,把鼠标指针移到菜单条目上再应用程序框架的底部的状态栏里就会显示它们的一些简短描述,也许会对你有帮助。

    32 、要在编辑器里显示方法间的分隔线,打开 Options | IDE Settings | Editor ,选中“ Show method separators ”检查盒( checkbox )。

    33 、用 Alt-Up 和 Alt-Down 键可以在编辑器里不同的方法之间快速移动。

    34 、用 F2/Shift-F2 键在高亮显示的语法错误间跳转。

    用 Ctrl-Alt-Down/Ctrl-Alt-Up 快捷键则可以在编译器错误信息或者查找操作结果间跳转。

    35 、通过按 Ctrl-O ( Code | Override Methods… )可以很容易地重载基本类地方法。

    要完成当前类 implements 的(或者抽象基本类的)接口的方法,就使用 Ctrl-I ( Code | Implement Methods… )。

    36 、如果光标置于一个方法调用的括号间,按 Ctrl-P 会显示一个可用参数的列表。

    37 、要快速查看编辑器脱字符处使用的类或方法的 Java 文档,按 Ctrl-Q (在弹出菜单的 Show Quick JavaDoc 里)即可。

    38 、像 Ctrl-Q ( Show Quick JavaDoc 显示简洁 Java 文档), Ctrl-P ( Show Parameter Info 显示参数信息), Ctrl-B ( Go to Declaration 跳转到声明), Shift-F1 ( External JavaDoc 外部 Java 文档)以及其它一些快捷键不仅可以在编辑器里使用,也可以应用在代码完成右键列表里。

    39 、 Ctrl-E ( View | Recent Files )弹出最近访问的文件右键列表。选中文件按 Enter 键打开。

    40 、在 IDEA 中可以很容易地对你的类,方法以及变量进行重命名并在所有使用到它们的地方自动更正。

    试一下,把编辑器脱字符置于任何一个变量名字上然后按 Shift-F6 ( Refactor | Rename… )。在对话框里键入要显示地新名字再按 Enter 。你会浏览到使用这个变量地所有地方然后按“ Do Refactor ”按钮结束重命名操作。

    41 、要在任何视图( Project View 工程视图, Structure View 结构视图或者其它视图)里快速

    选择当前编辑地部分(类,文件,方法或者字段),按 Alt-F1 ( View | Select in… )。

    42 、在“ new ”字符后实例化一个已知类型对象时也许你会用到 SmartType 代码完成这个特性。比如,键入

    再按 Ctrl-Shift-Space :

    43 、通过使用 SmartType 代码完成,在 IDEA 中创建接口的整个匿名 implementation 也是非常容易的,比如,对于一些 listener (监听器),可以键入

    Component component;

    component.addMouseListener(

    new

    );

    然后再按 Ctrl-Shift-Space 看看有什么发生了。

    44 、在你需要设置一个已知类型的表达式的值时用 SmartType 代码完成也很有帮助。比如,键入

    String s = (

    再按 Ctrl-Shift-Space 看看会有什么出现。

    45 、在所有视图里都提供了速查功能:在树里只需键入字符就可以快速定位到一个条目。

    46 、当你想用代码片断捕捉异常时,在编辑器里选中这个片断,按 Ctrl-Alt-T ( Code | Surround with… )然后选择“ try/catch ”。它会自动产生代码片断中抛出的所有异常的捕捉块。在 Options | File Templates | Code tab 中你还可以自己定制产生捕捉块的模板。

    用列表中的其它项可以包围别的一些结构。

    47 、在使用代码完成时,用 Tab 键可以输入弹出列表里的高亮显示部分。

    不像用 Enter 键接受输入,这个选中的名字会覆盖掉脱字符右边名字的其它部分。这一点在用一个方法或者变量名替换另一个时特别有用。

    48 、在声明一个变量时代码完成特性会给你显示一个建议名。比如,开始键入“ private FileOutputStream ”然后按 Ctrl-Space

    展开全文
  • Android基本知识点 1、常规知识点 1、 Android类加载器 在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class...
  • -----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 目录: Android Studio 之命令行开发安卓 一、命令行获取所有可用的安卓系统镜像信息 二、命令行创建创建安卓项目 三、...
  • Cocos2d-android是Cocos2dx家族中的一员,优点是使用Java语言进行游戏代码的编写,不像Cocos2dx需要使用C++ 、Lua,方便安卓程序员上手。缺点也显而易见,Cocos2dx本身使用C++开发的,Cocos2dx-android相当于做了一...
  • 最近一段时间看了一些关于Android热修复的知识,比如Andfix,Tinker,Sophix等,看了这些框架的原理,就想着自己能不能手撸一个简单的demo。下面我们就来自己动手实现Android热修复吧。 热修复实现原理 所谓热修复...
  • Android 常用工具命令

    2010-11-13 02:44:00
    <br />Dalvik调试监控服务工具(Dalvik Debug Moniter Service) 控制台 输入ddms 启动 <br />Android资源打包工具Android Asset Packaging Tool) AAPT是Android的资源打包工具,可以通过...
  • 2016大家新年好!这是今年的第一篇文章,那么应CSDN工作人员的建议,为了能给大家带来更好的阅读体验,我也是将博客换成了宽屏版。另外,作为一个对新鲜事物从来后知后觉的人,我终于也在新的一年里改用MarkDown...
  • 当你的应用程序和库引用达到一定规模,你遇到构建错误显示你的应用已经达到了一个Android应用程序构建体系结构的限制。上面的错误显示一个共同的数字:65536。这个数字是重要的,它代表了引用的总数,可以在单个调用...
  • 通许软件的聊天窗口。此Demo 高仿微信聊天界面
  • 腾讯Bugly特约作者:李金涛一、背景就在项目灰度测试前不久,爆出了在 Android 3.0以下手机上安装时出现 INSTALL _ FAILED_DEXOPT,导致安装失败。这一问题意味着项目将不能在 Android 3.0以下的手机上安装使用,对...
  • ANDROID SDK体系介绍

    2016-04-09 09:32:37
    本章介绍了Android SDK的相关内容,包括其文档解读,示例讲解,以及相关API的介绍,通过本章的学习,可以比较清晰地把握Android SDK的全貌,熟悉其提供的相关示例,以及附带的工具使用。另外,按照课件中推荐的文档...
  • Google最近正式发布了其基于Linux2.6内核的手机操作系统——Android,最新的SDK现在已经可以下载了,其App开发环境是Java!特性程序程序框架可重用及可复写组件组成 针对移动设备优化过的Dalvik虚拟机 整合浏览器, ...
  • Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器...
  • 这里我将开始写曾经学过的cocos2dx的表层教程。 这开篇可能我要多说几句,希望不要嫌弃哈~毕竟每一个引擎背后都有一些不为人知的故事,很值得缅怀。
  • android MultiDex 原理下遇见的N个深坑(二) 自动化打包工具 multidex原理 这是在一个论坛看到的问题,其实你不知道MultiDex到底有多坑。 解决和遇到的其它问题,请见下一篇文章:android MultiDex 原理下超出方法...
  • 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK...
1 2 3 4 5 ... 20
收藏数 2,032
精华内容 812
关键字:

dx工具 如何重写android