zoukankan      html  css  js  c++  java
  • LogCat、签名、反编译、常见事件实现

    1.在res目录下新建目录values-zh-rCN,并在values-zh-rCN目录下新建strings.xml,可以根据安卓系统的操作语言的不同显示相应的语言。
    2.LogCat(后台日志监控):
    5个打印级别:
    verbose详细,debug调试,info通知,warn警告,error错误
    过滤器
    增加System.out过滤器
    3.签名的意义:为了保证每个应用程序开发商合法ID,防止部分开放商可以通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装)。
    签名的步骤:a)创建key;b)使用步骤a产生的key对apk的签名
    4.反编译apk:
    (1).解压apk文件,提取classes.dex文件复制到dex2jar的安装目录下,使用dex2jar在windows终端进行反编译:

    Microsoft Windows [版本 6.1.7601]
    版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

    C:UsersAdministrator>e:

    E:学习软件>cd dex2jar

    E:学习软件dex2jar>cd dex2jar-0.0.9.15

    E:学习软件dex2jardex2jar-0.0.9.15>d2j-dex2jar.bat classes.dex
    dex2jar classes.dex -> classes-dex2jar.jar

    E:学习软件dex2jardex2jar-0.0.9.15>

    classes.dex文件反编译后生成classes-dex2jar.jar文件。

    (2).运行jd-gui,直接把classes-dex2jar.jar拖拽到面板内就可看到java信息,进行保存。
    5.常见事件相应的实现方式:
    常见事件:单击事件onClickListener、长按事件onLongClickListener、滑动事件onTouchListener、键盘事件onKeyListener、焦点事件setOnFocusChangeListender
    A).单击事件
    (1).动态设置(最常用方式)
    button.setOnClickListener(new OnClickListener()
    {
      @Override
      public void OnClick(View v)
      {
        System.out.println("button发生点击事件~~");
      }
    });
    (2).配置方式 仅限于onclick
    <Button
    android:id="@+id/buuton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
    android:onClick="test2"

    />
    在activity中实现test2方法,如下:
    public void test2(View view) {
    }
    3.可复用方式:
    在onclick方法中判断哪些组件发生了相应事件。
    例如:
    首先在activity_mian.xml中添加按钮,并给每个按钮取相应的名字。

    在onCreate方法中:
    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    Button button3 = (Button) findViewById(R.id.button3);
    button1.setOnClickListener(MyBtnListener);
    button2.setOnClickListener(MyBtnListener);
    button3.setOnClickListener(MyBtnListener);
    在onCreate方法外:
    private View.OnClickListener MyBtnListener = new OnClickListener()
    {
    @Override
    public void onClick(View v)
    {
    switch(v.getId())
    {
      case R.id.button1:Toast.makeText(MainActivity.this, "button1被点击", Toast.LENGTH_SHORT).show();
      break;
      case R.id.button2:Toast.makeText(MainActivity.this, "button2被点击", Toast.LENGTH_SHORT).show();
      break;
      case R.id.button3:Toast.makeText(MainActivity.this, "button3被点击", Toast.LENGTH_SHORT).show();
      break;
    }
    }
    };

    B).长按事件
    Button button4 = (Button) findViewById(R.id.button4);

    button4.setOnLongClickListener(new OnLongClickListener() {

    @Override
    public boolean onLongClick(View arg0) {
      // TODO Auto-generated method stub
      Toast.makeText(MainActivity.this, "LongClick", Toast.LENGTH_SHORT).show();
      return true;
    }

    });

    C)滑动事件
    元事件:action_down,action_move,action_up
    Event对象记录事件发生的现场情况。

    在onCreate方法中:
    Button button = (Button) findViewById(R.id.button1);

    button.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View view, MotionEvent event) {
    // TODO Auto-generated method stub
    int actionType = event.getAction();
    if(actionType == MotionEvent.ACTION_DOWN)
    {
      System.out.println("按下...");
    }
    else if(actionType == MotionEvent.ACTION_MOVE)
    {
      System.out.println("移动...");
    }
    else if(actionType == MotionEvent.ACTION_UP)
    {
      System.out.println("松开...");
    }
    else
    {

    }

      return true;
    }
    });


    按钮随鼠标而移动:
    final Button button = (Button) findViewById(R.id.button1);
    ViewGroup vg = (ViewGroup) findViewById(R.id.container);
    //viewgroup==div view==button...
    vg.setOnTouchListener(new OnTouchListener() {

      @Override
      public boolean onTouch(View view, MotionEvent event) {
      // TODO Auto-generated method stub
      int actionType = event.getAction();
      if(actionType == MotionEvent.ACTION_DOWN)
      {
        System.out.println("按下...");
      }
      else if(actionType == MotionEvent.ACTION_MOVE)
      {
        System.out.println("移动...");
        button.setX(event.getX());
        button.setY(event.getY());
      }
      else if(actionType == MotionEvent.ACTION_UP)
      {
        System.out.println("松开...");
      }
      else
      {

      }

      return true;
      }

    });

    D).键盘事件:

      final Button button = (Button) findViewById(R.id.button1);


      button.setOnKeyListener(new OnKeyListener() {

      @Override
      public boolean onKey(View v, int keyCode, KeyEvent event) {
      // TODO Auto-generated method stub
      System.out.println(keyCode);
      //a:29 w:51 s:47 d:32

      if(keyCode == 29) {
        button.setX(v.getX()-10);
      }else if(keyCode == 51) {
        button.setY(v.getY()-10);
      }else if(keyCode == 47) {
        button.setY(v.getY()+10);
      }else if(keyCode == 32) {
        button.setX(v.getX()+10);
      }else {

      }

      return false;
      }

    });

    E).焦点事件
    在onCreate方法中:
      Button button = (Button) findViewById(R.id.button1);

      button.setOnFocusChangeListener(new OnFocusChangeListener() {

      @Override
      public void onFocusChange(View v, boolean b) {
      System.out.println("focus");

      }

    });

    通过按键盘上的tab键来获取焦点。

  • 相关阅读:
    2、细节&Class对象
    1、概述&应用场景
    Magento请求分发与控制器
    Magento强大的配置系统
    ecshop在PHP 5.4以上版本各种错误问题处理
    Thinkphp单字母函数使用指南
    五种常见的 PHP 设计模式
    MyISAM和InnoDB的区别
    linux下如何删除文件夹
    Linux软件安装与卸载
  • 原文地址:https://www.cnblogs.com/UUUP/p/3983389.html
Copyright © 2011-2022 走看看