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

news2024/11/15 6:42:39

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

内容参考于:图灵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):设置按钮的背景颜色。

代码例子:

<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的包了

然后代码

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):设置提示文本内容。

代码示例:

<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布局还可以垂直排列,如下图

效果图:

又想垂直又想水平的写法

然后输入框使用例子

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):设置文本颜色。

示例代码:

<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()等方法来动态加载图片。

代码示例:

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

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2150352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python酷库之旅-第三方库Pandas(122)

目录 一、用法精讲 541、pandas.DataFrame.take方法 541-1、语法 541-2、参数 541-3、功能 541-4、返回值 541-5、说明 541-6、用法 541-6-1、数据准备 541-6-2、代码示例 541-6-3、结果输出 542、pandas.DataFrame.truncate方法 542-1、语法 542-2、参数 542-3…

Linux进阶命令-scp

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 经过上一章Linux日志的讲解&#xff0c;我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令&am…

有没有自带财务管理功能的海外仓系统?

在全球化的商业环境中&#xff0c;海外仓作为连接国际市场的物流枢纽&#xff0c;其重要性日益凸显。然而&#xff0c;随着业务范围的扩展和费用类型的多样化&#xff0c;海外仓在财务管理上面临着诸多挑战。传统的手工计费和对账方式不仅耗时费力&#xff0c;而且容易出错&…

常用的k8s容器网络模式有哪些?

常用的k8s容器网络模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI&#xff08;ContainerNetworkInterface&#xff09;模式。K8s的容器网络模式多种多样&#xff0c;每种模式都有其特点和适用场景。Bridge模式适用于简单的容器通信场景&#xff1b;Host模式适用…

将阮一峰老师的《ES6入门教程》的源码拷贝本地运行和发布

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 阮一峰老师的《ES6入门教程》应该是很多同学学习 ES6 知识的重要参考吧&#xff0c;应该也有很多同学在看该文档的时候&#xff0c;想知道这个教程的前端源码是怎么实现的&#xff0c;也可能有同学下载…

掌握Python-uinput:打造你的输入设备控制大师

文章目录 掌握Python-uinput&#xff1a;打造你的输入设备控制大师背景&#xff1a;为何Python-uinput不可或缺&#xff1f;Python-uinput是什么&#xff1f;如何安装Python-uinput&#xff1f;简单库函数使用方法创建虚拟设备模拟按键模拟鼠标移动模拟滚轮滚动关闭设备 场景应…

IP Source Guard技术原理与应用

目录 IP Source Guard概述 IP Source Guard源数据表项 IP Source Guard源数据-静态添加 IP Source Guard查看 IP Source Guard使用注意事项 IP Source Guard概述 局域网IP冲突给网络的运维带来很大困扰存在以下风险&#xff1a; 使用手工配置IP地址的方式上网&#xff0c…

Redis——C++库redisplusplus在Linux环境下的安装

目录 第一步&#xff0c;安装hiredis第二步&#xff0c;下载redis源码第三步&#xff0c;编译/安装 redis-plus-plus使用redis-plus-plus(以Centos为例)Ubuntu的Makefile 第一步&#xff0c;安装hiredis redis-plus-plus 是基于 hiredis 实现的&#xff0c;而hiredis 是⼀个 C…

【图像检索】基于傅里叶描述子的形状特征图像检索,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于傅里叶描述子的形状特征图像检索&#xff0c;用matlab实现。 一、案例背景和算法…

企业数字化底座与数字化转型方案(可编辑的81页PPT)

方案介绍&#xff1a;在当今数字化转型的浪潮中&#xff0c;企业数字化底座与数字化转型方案是企业应对市场变化、提升竞争力的关键举措。通过构建数字化底座&#xff0c;实现数据的集中管理和共享&#xff1b;通过数字化转型方案的实施&#xff0c;推动企业的全面数字化改造。…

进阶版水仙花数水是指一个n位数,各个位数字的n次方之和等于该数字本身

两种方法&#xff1a; 第一种&#xff0c;是输入一个数值&#xff0c;判断是否为水仙花数 //打印水仙花数 //水仙花数是指一个n位数&#xff0c;各个位数字的n次方之和等于该数字本身 //如&#xff1a;1531^35^33^3 // //分析&#xff1a; //153/1015 //15/101 //1/100 #incl…

.whl文件下载及pip安装

以安装torch_sparse库为例 一、找到自己需要的版本&#xff0c;点击下载。 去GitHub的pyg-team主页中找到pytorch-geometric包。网址如下&#xff1a; pyg-team/pytorch_geometric​github.com/pyg-team/pytorch_geometric 然后点击如图中Additional Libraries位置的here&am…

Qt 多线程TCP客户端使用QTimer进行重连服务器———附带详细代码和讲解

文章目录 0 背景1 原理1.1 QThread的线程归属1.2 Qtimer使用1.3 TCP客户端使用 2 问题解决2.1 解决思路2.2 解决方法 3 完整的代码示例3.1 tcp_client类3.2 主界面类 附录参考 0 背景 在子线程中&#xff0c;使用Qtimer来进行定时重连TCP服务器&#xff0c;总是会出现跨线程创…

U盘显示未被格式化:深度解析、恢复策略与预防之道

现象透视&#xff1a;U显示未被格式化的迷局 在日常的数字生活中&#xff0c;U盘作为我们随身携带的数据仓库&#xff0c;承载着无数重要的文件与回忆。然而&#xff0c;当U盘突然弹出“未被格式化”的警告时&#xff0c;这份便捷瞬间转化为焦虑与不安。这一提示不仅意味着U盘…

uboot:源码分析-启动第一阶段-start.S解析

start.S引入 进入start.S文件中&#xff0c;发现57行中就是_start标号的定义处 SourceInsight中添加行号 在SI中&#xff0c;如果我们知道我们要找的文件的名字&#xff0c;但是我们又不知道他在哪个目录下&#xff0c;我们要怎样找到并打开这个文件&#xff1f;方法是在SI中先…

多重指针变量(n重指针变量)实例分析

0 前言 指针之于C语言&#xff0c;就像子弹于枪械。没了子弹的枪械虽然可以用来肉搏&#xff0c;却失去了迅速解决、优雅解决战斗的能力。但上了膛的枪械也非常危险&#xff0c;时刻要注意是否上了保险&#xff0c;使用C语言的指针也是如此&#xff0c;要万分小心&#xff0c;…

usemeno和usecallback区别及使用场景

1. useMemo 用途: useMemo 用于缓存计算结果。它接受一个函数和依赖项数组&#xff0c;只有当依赖项发生变化时&#xff0c;才会重新计算该函数的返回值。否则&#xff0c;它会返回缓存的值。 返回值: useMemo 返回的是函数执行后的结果。 使用场景: 当一个计算量大的函数在每…

Java面试篇基础部分-线程的基本方法

线程的基本方法有wait()、notify()、notifyAll()、sleep()、join()、yield()等等,这些方法都是用来控制线程的运行,并且可以实质性的影响到线程的状态变化情况。 让线程等待的方法:wait()方法 调用wait()方法的线程会进入到WAITING状态,只有等到其他线程通知或者线程被中…

【数据结构-差分】力扣1589. 所有排列中的最大和

有一个整数数组 nums &#xff0c;和一个查询数组 requests &#xff0c;其中 requests[i] [starti, endi] 。第 i 个查询求 nums[starti] nums[starti 1] … nums[endi - 1] nums[endi] 的结果 &#xff0c;starti 和 endi 数组索引都是 从 0 开始 的。 你可以任意排列…

【Java面向对象二】static的注意事项

文章目录 前言一、关于static的三个注意点总结 前言 记录static的学习注意事项。 一、关于static的三个注意点 1、类方法中可以直接访问类的成员&#xff0c;不可用直接访问实例成员。 2、实例方法中既可以直接访问类成员&#xff0c;也可以直接访问实例成员。 3、实例方法…