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:\Users\Administrator>e:

E:\学习软件>cd dex2jar

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

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

E:\学习软件\dex2jar\dex2jar-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键来获取焦点。

时间: 2024-10-01 03:16:55

LogCat、签名、反编译、常见事件实现的相关文章

Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正

一.前言 在之前的破解过程中可以看到我们唯一离不开的一个神器那就是apktool了,这个工具多强大就不多说了,但是如果没有他我们没法涉及到后面的破解工作了,这个工具是开源的,也是使用Java语言开发的,代码相对简单,我们今天就来分析一下他的大体逻辑,注意是大体逻辑哦,因为如果要一行一行代码分析,首先觉得没必要,其次浪费时间,有了源码,谁看不懂呢.至于为什么要分析这个工具其实原因只有一个,就是我们在之前的反编译过程中会发现,总是有那么几个apk应用不让我们那么容易的反编译,他们就利用apktool

Android对apk源代码的改动--反编译+源代码改动+又一次打包+签名【附HelloWorld的改动实例】

最近遇到了须要改动apk源代码的问题,于是上网查了下相关资料.编写了HelloWorld进行改动看看可行性,经过实验证明此方案可行,而且后来也成功用这种方法对目标apk进行了改动,仅仅只是须要改动的部分比HelloWorld复杂些,可是仅仅要了解下smali也能进行相关的改动,以下讲下详细的步骤,文中所用到的资源会在文章的结尾给出,感兴趣的能够下载试试. 首先介绍下要用到的工具: jdk:这个不用多说了 baksmali:把classes.dex转为为smali文件的工具 dex2jar:cla

android逆向基础:apk 反编译 重打包 重签名

apk 反编译大家都比较熟悉,这里只做一个笔记. 1 反编译 apk apktool d perfect.apk 这样就把资源文件解压缩了, classes.dex 也反编译成了 smali 文件 2 修改 smali 文件 得到 smali 文件,现在就可以对 smali 文件进行修改和添加自己的代码了. 当然可以进一步用  dex2jar 处理将  dex 转成 java class 文件, 再用  jd-jui 等反编译成 java 代码. 现在 apk 基本都做了混淆, 但仔细读还是基本

MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)

前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的,mac上也妥妥的.这里记录下在mac上所用的东西和流程. 总共需要三个软件,为了便于找到最新的版本,把官网也放后面: Apktool:http://ibotpeaches.github.io/Apktool/install/ 最新版本2.0.1 dex2jar: https://github.com

Android反编译(三)之重签名

Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Android系统不会安装一个没有数字证书的应用程序: b.Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证: c.数字证书都是存在有效期的,Android只是在应用程序安装的时候才会检查证书的有效期.如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能. d.A

Unity3D对apk反编译、重编译、重签名

本文源链接:http://blog.csdn.net/qq393830887/article/details/56025923 工具 Java环境 Apktool(这玩意有些坑爹,不是官网最新的就好,找到一个好用的版本能少很多坑) Apktool Jarsigner 反编译 var argList = ProcessHelper.CreateArgumentsContainer(); argList.Add("java -jar"); argList.Add(ApkToolPath);

android apk反编译(反编译—改代码—再编译—签名)

1.工具(请到网站搜索并自行下载): ①apktool(反编译:能得到图片资源与布局文件等) ②dex2jar(反编译:能得到activity等java代码) ③jd-gui(查看dex2jar得到的java文件) ④手机签名工具(签名) 2.步骤: ①apktool反编译 (1)将apktool.bat aapt.exe  apktool.jar与要反编译的apk文件放到同一目录下 (2)运行cmd并切换到apktool所在的路径 (3)输入:apktool d a.apk test (格式:

反编译android应用,降低权限去广告及重新签名

功能:反编译apk降低权限及重新签名 场景:很多软件,申请了一些可能会导致付费(如,发短信,呼叫号码)或者泄漏隐私(如:读取通讯录)的权限,让人很不放心.比如:飞信.墨迹天气.iReader等都在此列.为了让自己能放心使用,需要做一些破解工作,减少该应用程序的权限,限制其操作. 工具:apktool-install-windows-2.2_r01-3.tar.bz2 (http://code.google.com/p/android-apktool/downloads/list) 工具:(JDK

ApkTool反编译apk,去除广告或者汉化后重新打包apk,并签名

http://my.oschina.net/mopidick/blog/135581 以ubuntu的环境为例子,window的大同小异 首先下载apktool工具:https://code.google.com/p/android-apktool/ 注意:这个地址下载时,由于官网把apktool和apktool-install-linux-r05-ibot(或者是window下的)两个工具分开了,所以用户需要同时下载: <!-- lang: shell --> 1.apktool1.5.2.