想了解一下Android逆向,但又没有过Android的开发经验,所以从慕课网上找了一个视频,做了一点笔记,有点乱:
Android项目结构
几点说明:
0.AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)
1.界面布局文件一般在res(文件夹)下的layout(文件夹)下面的(xml文件)进行编辑 。
2.xml文件与java源文件进行关联是通过下面方法实现的:
setContentView(R.layout.activity_main);//将布局的main_activity.xml文件引入到activity当中
3.xml文件里面的数字、字符串一般都是写在values文件下的一个文件(相当于在values文件夹下的XXX.xml里起个 “别名”),xml只需用“@XXX/别名 ”引用。
4.res文件夹下面的所有的资源都会对应在gen(文件夹)目录下的R(.java)文件中生成对应的资源id(唯一标识数据的)
5.Activity是一个应用程序组件,提供用户与程序交互的界面,Activity的创建要求:
继承Android的Activity类;
重写方法(onCreate);
设置显示布局;
在AndroidManifest文件中,注册Activity。即:在AndroidManifest.xml文件的标签activity里面的android:name="包(Activity所在包)名.Activity的名字",见下图。
6.Button与ImageButton区别:
Button可以设置文本内容的按钮
ImageButton不可设置内容的一个按钮,background以及src添加一个image,当前图片可以做一个有文本的内容的图片实现Button。
7.所有控件都有一个onclick的事件,不仅仅是Button和ImageButton。
监听事件实现的3种写法:(原理见名知意,下面分别有按视频抄写的“啰嗦”代码)
(1.匿名内部类的实现
public class MainActivity extends Activity{ private Button loginButton; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* * 1.初始化当前所需要的控件,如歌初始化一个控件? * findViewById---返回的是一个View的对象,View是所有控件的父类 * findViewByIdshi 如何查找到对应view的id? R.java里面的id类中会自动生成button1 * * 2.设置Button的监听器,通过监听器实现我们点击Button要操作的事情 */ loginButton =(Button) findViewById(R.id.button1) /* * 1.监听事件通过第一种方法实现(匿名内部类) */ loginButton.setOnClickListener(new OnClickListener(){ public void onClick(View arg0){ //在当前onClick方法中监听点击Button的动作 System.out.printIn("我的Button被点击了"); } }); } }
(2.独立类的实现
public class MainActivity extends Activity{ private Button bt1; private Button bt2; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt1=(Button)findViewById(R.id.button1); bt1=(Button)findViewById(R.id.button2); // bt1.setOnClickListener(new OnClickListener(){ // public void onClick(View v){ // } // }); /* *点击事件的外部类的写法和作用 */ bt1.setOnClickListener(new MyOnClickListener(){ public void onClick(View v){ //调用父类的onClick super.onClick(v); Toast.makeText(MainActivity.this,"bt1要执行的逻辑",1).show(); } }); bt2.setOnClickListener(new MyOnClickListener(){ public void onClick(View v){ //调用父类的onClick super.onClick(v); Toast.makeText(MainActivity.this,"bt2要执行的逻辑",1).show(); } }); } } /* * OnClickListener是一个接口 */ class MyOnClickListener implements OnClickListener{ public void onClick(View v){ //让所有使用当前外部类的点击事件的按钮都要做出一个动作,改变button的透明度 //Log.i("tag","父类的onclick事件"); v.setAlpha(0.5f); } }
(3.实现接口的方式来实现
public class MainActivity extends Activity implements OnClickListener{ private Button bt1; private Button bt2; private ImageButton imgBt; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt1=(Button)findViewById(R.id.button1); bt1=(Button)findViewById(R.id.button2); imgBt=(Button)findViewById(R.id.imageButton1); // bt1.setOnClickListener(new OnClickListener(){ // public void onClick(View v){ // } // }); /* *点击事件的外部类的写法和作用 */ bt1.setOnClickListener(new MyOnClickListener(){ public void onClick(View v){ //调用父类的onClick super.onClick(v); Toast.makeText(MainActivity.this,"bt1要执行的逻辑",1).show(); } }); bt2.setOnClickListener(new MyOnClickListener(){ public void onClick(View v){ //调用父类的onClick super.onClick(v); Toast.makeText(MainActivity.this,"bt2要执行的逻辑",1).show(); } }); } } /* * 3.通过实现一个接口的方式实现监听器 */ imgBt.setOnClickListener(this); /* * OnClickListener是一个接口 */ class MyOnClickListener implements OnClickListener{ public void onClick(View v){ //让所有使用当前外部类的点击事件的按钮都要做出一个动作,改变button的透明度 //Log.i("tag","父类的onclick事件"); v.setAlpha(0.5f); } public void onClick(View v){ Log.i("tag","第三种方式实现"); } }