因为最近在研究安卓逆向,想着把正向开发的知识给补一补,所以找到了《第一行代码(第二版)》这本书来入安卓开发的门,以知道常规app开发流程及相关信息知识为目的,开始这一系列,近期会把这本书速刷并做完书中项目,和学习安卓逆向的一些技术。
本篇为第二篇的前半部分,就挑些我觉得重要的部分写一些。
二
本章主要是手动创建一个activity并介绍activity相关参数和声明的知识,还有部分开发常识(例如逻辑和试图分离)。
自建活动
我首先自己创建了一个单活动的app,基本上就是默认的参数。

看看主文件
过程很简单,就是调用父类oncreate和设置布局及文本。

再看看配置清单
看到这里的声明(和书中的android5.0不一样,注意一下。)

手动创建
创建活动
首先是在main里面创建一个空活动。

就有了一个默认的活动代码
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
但是单单如此没有布局的,所以需要自己手动set一下
首先是要创建出这个布局,然后逻辑与之分离
创建布局
如下为布局代码
添加了一个button

<Button
android:id="@+id/button_1" 新增一个id
android:layout_width="match_parent" 宽度
android:layout_height="wrap_content" 长度
android:text="Button 1" 文本内容
/>
oncreate
好,现在布局代码已完工,需要去oncreate里操作了
可以看到和上面studio自建的代码一样,都是加载了一个布局id
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
}
在AndroidManifest文件中注册
这里是踩坑了,因为安卓版本差异,注册的写法不一样,我环境的版本上面由,书中如下

改进一下
<activity
android:name=".FirstActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
现在就可以运行了

在活动中使用Toast
就是一个小小的提醒弹窗
我们让他和原神启动按钮绑定一下
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button) findViewById(R.id.button_1);findViewById() 方法获取到在布局文件中定义的元素
button1.setOnClickListener((new View.OnClickListener() { //调用setOnClickListener() 方法为按钮注册一个监听器
@Override
public void onClick(View view) {
Toast.makeText(FirstActivity.this, "有点磕青了",Toast.LENGTH_LONG).show();第一个上下文,第二个字符串,第三个时长
}
}));
}
ok

menu使用

创建

menu写好了,就是两个菜单项创建一下
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add_item"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
让menu可以显示
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate((R.menu.main),menu);//
//getMenuInflater() 方法能够得到MenuInflater 对象
//inflate() 方法就可以给当前活动创建菜单
//第一个参数用于指定我们通过哪一个资源文件来创建菜单
//第二个参数用于指定我们的菜单项将添加到哪一个Menu
return true;
}
显示还不够,还要有东西,用的case
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this, "我是原皮",Toast.LENGTH_LONG).show();
break;
case R.id.remove_item:
Toast.makeText(this, "我是舟皮",Toast.LENGTH_LONG).show();
break;
default:
}
return true;
}
成功



销毁活动
正常手机back一下就ok
这里用finish()方法
把按钮作用改掉
button1.setOnClickListener((new View.OnClickListener() {
@Override
public void onClick(View V){
finish();
}
ok
