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键来获取焦点。

原文地址:https://www.cnblogs.com/UUUP/p/3983389.html