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();
            }
        });
    }
}

相关推荐
数据猎手小k26 分钟前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
你的小101 小时前
JavaWeb项目-----博客系统
android
风和先行2 小时前
adb 命令查看设备存储占用情况
android·adb
AaVictory.2 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
似霰3 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
大风起兮云飞扬丶3 小时前
Android——网络请求
android
干一行,爱一行3 小时前
android camera data -> surface 显示
android
断墨先生4 小时前
uniapp—android原生插件开发(3Android真机调试)
android·uni-app
无极程序员5 小时前
PHP常量
android·ide·android studio
萌面小侠Plus6 小时前
Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
android·性能优化·kotlin·工具类·低端机