免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵Python学院
本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:7.安卓逆向-安卓开发基础-开发环境
上一个内容里搭建了安卓开发环境并且写了一个简单的app,也通过模拟器把app运行了起来,本次开始是真正的安卓开发教程
首先安卓是基于Linux系统开发的,这也就是说安卓内部可以使用Linux指令(或者说是命令)来操作。
然后安卓它分了四个层面,从高到底分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层,如果搞安卓开发这四层都要学,但是逆向只需要搞应用程序层
Android四大组件
Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者)
说明
Activity:手机打开一个app看到的界面就是一个Activity,如下图,它就是一个Activity
然后如下图app里点击某个按钮它会切换页面,它这就是切换一个Activity
Service:比如后台播放一个音乐、后台下载这种,在后台运行的东西就是一个Service
然后点击下图红框返回到桌面,这时大麦app是在后台运行,这时的大麦app它就是一个Service
BroadcastReceiver(广播接收器):如下图,这些就是BroadcastReceiver,还有微信别人发来消息它会有一个悬浮框这也是BroadcastReceiver
ContentProvider(内容提供者):比如读取手机里的通信录、图片、视频
系统层面就是根据Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者)这四东西设计的
开始写代码
Activity:它实际上就是提供一个ui界面,可以跟用户交互,也就是给用户看到给用户点点点的,然后它通过setContentView(View)来显示指定控件,通过Intent进行通信,两个Activity切换就是通过Intent,所以Intent是一个核心
上一个内容通过模板创建的app,如下图,它就给了一个Activity
如果要新加一个Activity,如下图右击选择New,然后选择Activity
然后下图红框里的是不同的界面布局
然后通过上图红框里的东西不是很清晰什么都是什么,可以点击,下图红框
然后就可以出现下图红框的窗口,下图的方式选择就很清晰了
然后选择下图红框,创建一个空白的界面
然后如下图选择,然后点击Finish
然后就创建好了,下图里有红色下划线,这个等待一会就好了
然后现在就有两个Activity了具体显示哪个Activity需要改一下清单文件,如下图红框刚刚创建的Activity,也就是第二个Activity
下图红框是第一个Activity
然后把下图里的false改成true,就可以在打开app的时候优先显示第二个Activity了
<!---声明实现应用部分可视化界面的 Activity,必须使用 AndroidManifest 中的 <activity> 元素表示所有 Activity。系统不会识别和运行任何未进行声明的Activity。-----><activity android:label="@string/app_name" android:name="com.zj.wuaipojie.ui.MainActivity" android:exported="true"> <!--当前Activity是否可以被另一个Application的组件启动:true允许被启动;false不允许被启动--><!---指明这个activity可以以什么样的意图(intent)启动---><intent-filter> <!--表示activity作为一个什么动作启动,android.intent.action.MAIN表示作为主activity启动---><action android:name="android.intent.action.MAIN" /> <!--这是action元素的额外类别信息,android.intent.category.LAUNCHER表示这个activity为当前应用程序优先级最高的Activity--><category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
然后改成下图中的内容就可以显示第二个Activity了,下图中的 是注释,快捷键是CTRL+/,被注释的东西不会被当做成代码会被当做成给人看的内容
这时再运行就会显示第二个Activity了
然后开始写布局,首先打开第二个Activity的布局文件
然后使用 LinearLayout布局方式,它比较简单,适合入门
然后接下来编写一个按钮
按钮(Button)
常用的按钮属性和方法:
按钮的属性:
android:text
:设置按钮上显示的文本。android:background
:设置按钮的背景。android:onClick
:指定按钮被点击时调用的方法。常用方法:
setOnClickListener()
:为按钮设置点击监听器,当按钮被点击时触发相应的操作。setText(String text)
:设置按钮上显示的文本内容。setBackgroundColor(int color)
:设置按钮的背景颜色。代码例子:
<Buttonandroid:id="@+id/myButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Click me"android:onClick="onButtonClick" />
运行效果:
效果也可以通过点击下图红框的按钮查看
然后如下图,可以通过拖动创建控件(按钮就属于控件,ui里面的东西都被称为控件比如输入框、图片)
它有很多控件
然后使用按钮,首先如下图,它会出现红色的东西,鼠标点会有白色的下划线,这是因为没有导入包,下图是没有导入Button的包,这时按alt+enter键,enter键是回车键
然后选择下图红框
然后它就自动导入Button的包了
然后代码
package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast;public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Button button = findViewById(R.id.myButton);// 获取我们刚刚写的按钮button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 按钮点击时会执行这里面的代码Toast.makeText(MainActivity2.this, "点击一下",Toast.LENGTH_SHORT).show();}});} }
然后是EditText文本框(输入框)
常用的EditText属性和方法:
属性:
android:hint
:设置当EditText为空时显示的提示文本。android:inputType
:指定输入类型,例如文本、数字、密码等。android:maxLength
:限制输入的最大长度。android:textColor
:设置文本颜色。android:background
:设置背景。常用方法:
getText()
:获取EditText中的文本内容。setText(String text)
:设置EditText中的文本内容。setHint(String hint)
:设置提示文本内容。代码示例:
<EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="啊啊啊啊啊"android:inputType="text"android:maxLength="20" />
效果图:可以看出输入框自动往右排列了,这就是 LinearLayout布局,也就是水平排列
LinearLayout布局还可以垂直排列,如下图
效果图:
又想垂直又想水平的写法
然后输入框使用例子
package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Button button = findViewById(R.id.myButton);// 获取我们刚刚写的按钮EditText editText = findViewById(R.id.editText);// 获取我们刚刚写的按钮button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 按钮点击时会执行这里面的代码// editText.getText() 读取输入里的内容// Toast.makeText弹框,弹一个提示框Toast.makeText(MainActivity2.this, editText.getText(),Toast.LENGTH_SHORT).show();}});} }
显示文本TextView
常用的TextView属性和方法:
属性:
android:text
:设置TextView中显示的文本内容。android:textSize
:设置文本的大小。android:textColor
:设置文本颜色。android:gravity
:设置文本的对齐方式(例如居中、靠左等)。android:padding
:设置文本与TextView边缘的间距。常用方法:
setText(String text)
:设置TextView中显示的文本内容。getText()
:获取TextView中的文本内容。setTextSize(float size)
:设置文本的大小。setTextColor(int color)
:设置文本颜色。示例代码:
<TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello, this is a TextView"android:textSize="18sp"android:textColor="#000000"android:gravity="center" />
效果图:
ImageView用于显示图片
ImageView
的主要特点和用法:
- 显示静态图片: 可以通过设置
src
属性来显示静态图片,这可以是应用程序内的资源文件,也可以是网络上的图片地址。- 显示动画: 除了静态图片,
ImageView
也可以显示帧动画,通过设置src
属性为动画资源,或者通过代码动态设置动画资源。- 缩放类型: 可以通过设置
android:scaleType
属性来控制图片的缩放方式,例如居中、拉伸、等比例缩放等。- 交互功能:
ImageView
也可以响应触摸事件,实现点击、长按等操作。- 动态加载: 通过编程方式,可以使用
setImageResource()
、setImageBitmap()
、setImageDrawable()
等方法来动态加载图片。代码示例:
<ImageViewandroid:id="@+id/myImageView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/my_image"android:scaleType="centerCrop" />
先随便找一个图片
上图里图片赋值过去报红色,这是因为文件名需要英文的,如下图改名
改成英文的就好了
然后修改代码
然后如下图高度和宽度还可以这样写
以上是常用的控件,不常用的可以
从下图红框把想要的拖到界面中
然后点击code
下图拖的是RatingBar
然后点code看它的代码,如下图
完整代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity2"><!--android:id的内容是为了获取这个按钮,必须唯一--><Buttonandroid:id="@+id/myButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Click3333me" /><EditTextandroid:id="@+id/editText"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="啊啊啊啊啊"android:inputType="text"android:maxLength="20" /><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="cccccc"android:textSize="18sp"android:textColor="#000000"android:gravity="center" /><ImageViewandroid:id="@+id/myImageView"android:layout_width="300dp"android:layout_height="100dp"android:src="@drawable/yy"android:scaleType="centerCrop" /><RatingBarandroid:id="@+id/ratingBar"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Button button = findViewById(R.id.myButton);// 获取我们刚刚写的按钮EditText editText = findViewById(R.id.editText);// 获取我们刚刚写的输入框TextView textView = findViewById(R.id.textView);// 获取我们刚刚写的显示框(文本显示框)button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 按钮点击时会执行这里面的代码// editText.getText() 读取输入里的内容// Toast.makeText弹框,弹一个提示框textView.setText(editText.getText());Toast.makeText(MainActivity2.this, editText.getText(),Toast.LENGTH_SHORT).show();}});} }