8.安卓逆向-安卓开发基础-安卓四大组件1

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵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了

XML 复制代码
  <!---声明实现应用部分可视化界面的 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):设置按钮的背景颜色。

代码例子:

XML 复制代码
<Button
    android: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的包了

然后代码

java 复制代码
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 {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Button button = findViewById(R.id.myButton);// 获取我们刚刚写的按钮
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public 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):设置提示文本内容。

代码示例:

XML 复制代码
<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="啊啊啊啊啊"
    android:inputType="text"
    android:maxLength="20" />

效果图:可以看出输入框自动往右排列了,这就是 LinearLayout布局,也就是水平排列

LinearLayout布局还可以垂直排列,如下图

效果图:

又想垂直又想水平的写法

然后输入框使用例子

java 复制代码
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 {

    @Override
    protected 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() {
            @Override
            public 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):设置文本颜色。

示例代码:

XML 复制代码
<TextView
    android: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的主要特点和用法:

  1. 显示静态图片 : 可以通过设置src属性来显示静态图片,这可以是应用程序内的资源文件,也可以是网络上的图片地址。
  2. 显示动画 : 除了静态图片,ImageView也可以显示帧动画,通过设置src属性为动画资源,或者通过代码动态设置动画资源。
  3. 缩放类型 : 可以通过设置android:scaleType属性来控制图片的缩放方式,例如居中、拉伸、等比例缩放等。
  4. 交互功能 :ImageView也可以响应触摸事件,实现点击、长按等操作。
  5. 动态加载 : 通过编程方式,可以使用setImageResource()setImageBitmap()setImageDrawable()等方法来动态加载图片。

代码示例:

XML 复制代码
<ImageView
    android: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 复制代码
<?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的内容是为了获取这个按钮,必须唯一
    -->
    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click3333me" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="啊啊啊啊啊"
        android:inputType="text"
        android:maxLength="20" />
    <TextView
        android: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" />
    <ImageView
        android:id="@+id/myImageView"
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:src="@drawable/yy"
        android:scaleType="centerCrop" />

    <RatingBar
        android:id="@+id/ratingBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>
java 复制代码
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 {

    @Override
    protected 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() {
            @Override
            public void onClick(View v) {// 按钮点击时会执行这里面的代码
                // editText.getText() 读取输入里的内容
                // Toast.makeText弹框,弹一个提示框
                textView.setText(editText.getText());
                Toast.makeText(MainActivity2.this, editText.getText(),Toast.LENGTH_SHORT).show();
            }
        });
    }
}

相关推荐
阿巴斯甜3 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker4 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95275 小时前
Andorid Google 登录接入文档
android
黄林晴6 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab18 小时前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿21 小时前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android