安卓开发环境搭建

安卓开发环境搭建

1 安卓开发环境搭建

################安卓开发环境介绍####################

做安卓开发,必须要会java,需要安卓sdk,使用java的语法,编写安卓程序,编写过程中,需要有编辑器,IDEA是做不到,谷歌公司提供的 AndroidStudio,开发的app运行---》真机,模拟器(mumu,AndroidStudio提供的模拟器)

-java

-安卓sdk

-AndroidStudio

-真机,模拟器

# 早期做安卓开发,开发app,需要使用eclipse+安卓sdk,自己搭建环境

# 目前做安卓开发,谷歌公司官方提供 AndroidStudio,可以直接下载安卓sdk,直接开发---》集成开发环境

# 写完的代码运行

-真机--》推荐--》买了piexl--》安卓手机---》#####不需要root######

-网易mumu,夜神

-AndroidStudio 自带模拟器

1.1 安卓集成开发环境

# 下载安卓andoridstudio

#### 下载地址:

# 历史版本下载

https://developer.android.google.cn/studio/archive?hl=zh-cn

#最新版本下载

https://developer.android.google.cn/studio

### 教程

https://developer.android.google.cn/studio/intro?hl=zh-cn

#### AndroidStudio 本质就是 jetbrains公司的产品,谷歌公司买了版权+安卓sdk,组成了这么一款集成开发环境,使用习惯,跟pycharm,idea,都是一样的,免费的

#### 项目构建工具

Gradle和Maven都是Java项目的构建工具,但它们有一些区别:

1. 语法:Gradle使用Groovy语言进行编写,而Maven使用XML。Groovy更加灵活易读,XML更加严谨易于重用。

2. 性能:Gradle比Maven更加高效快速,因为它使用了增量构建模式,只会重新构建被更改的模块,而Maven则需要重新构建整个项目。

3. 插件:Gradle的插件生态更加丰富和现代化,而Maven的插件相对较为传统。此外,Gradle的插件可以非常容易地编写和定制,而Maven的插件相对繁琐。

4. 维护:Maven有比较成熟的工具链和文档支持,而Gradle则相对较新,可能需要更多的自学

### java开发,javaee:javaweb开发,Maven使用XML

### andorid开发:Gradle使用Groovy语言进行编写

# Groovy介绍

Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码

1.2 下载配置安装环境

## 把软件双击:android-studio-2022.3.1.19-windows.exe

-是否安装安卓虚拟机:我们以后都用真机

1.2.1 AndroidStudio安装

1.2.2 配置AndroidStudio

1.2.3 创建android项目

1 .2.4 手动创建项目

1.3 运行项目(真机,模拟器)

1.3.1 真机运行

# 手机开启开发者模式 & USB调试,并且用数据线和电脑连接。

# 当你一插线,手机上会提示授权

# 稍等片刻,此时在android studio中会读取到你的手机设备。

# 如果没有读取到,请在手机上【撤销USB调试授权】,然后再重新插入USB,重新授权。

# 运行第一个app

1.3.2 模拟器运行程序

# 以后不要用

2 安卓项目目录结构

2.1 安卓开发流程

2.2 安卓项目目录结构

2.2.1 安卓视图

├── .gradle #AndroidStudio 自动生成的文件,会自动修改它的,项目打包时也会删除(不用关注);

├── .idea # AndroidStudio自动生成的文件,会自动修改它的,项目打包时也会删除(不用关注);

├── app # 应用相关的东西都在里面,工作的核心目录

│ ├── build # 编译的产物。某些情况下,可以手动把它整个删掉。

│ ├── libs # 依赖包可以放这里,比如一些jar文件,so文件。

│ ├── src # 代码在这。非常重要。

│ │ ├── main

│ │ │ ├── java # 放Java代码的地方

│ │ │ ├── res

│ │ │ │ ├── drawable # 应用图标

│ │ │ │ ├── layout # Android布局文件夹

│ │ │ │ ├── mipmap # 适配不同分辨率的手机

│ │ │ │ ├── mipmap # 桌面图标

│ │ │ │ └── values # 颜色、样式、字符集配置文件夹

│ │ │ ├──AndroidManifest.xml#APP运行配置文件,用来配置权限:程序入口配置、应用程序主题、应用程序组件等

│ ├── .gitignore # 版本控制

│ ├── build.gradle # 非常重要,app的构建配置。俗称“app的gradle文件”。

│ └── proguard-rules.pro # 不管。这个是混淆配置。

├── gradle # 它是一个构建起配置文件

├── .gitignore # 整个工程的版本控制

├── build.gradle # 很重要。项目级的配置。俗称“项目gradle文件”

├── gradle.properties # 全局的gradle配置文件

├── gradlew # Linux/mac上执行gradle命令

├── gradlew.bat # Windows上执行gradle命令

├── local.properties # 本地配置文件,一般不上传

└── settings.gradle # gralde的项目级配置

### 注意:

src

-main

-java

-res

-layout

AndroidManifest.xml

build.gradle

3 第一个app--点击按钮切换美女图片

3.1 activity_main.xml

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"

tools:context=".MainActivity">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/white"

android:orientation="vertical">

android:layout_margin="10dp"

android:id="@+id/image"

android:layout_width="match_parent"

android:layout_height="300dp"

android:src="@color/pink">

android:id="@+id/button"

android:layout_marginTop="50dp"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="点击换美女">

3.2 MainActivity

package com.justin.s9demo01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private Button button01; // 用来接受页面中的button

private ImageView image; // 用来接受页面中的Image

private int id = R.drawable.a;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main); // 让这个java文件跟activity_main.xml对应上

//1 取到页面中的button和image

button01 = findViewById(R.id.button); // 去activity_main根据id找组件

image = findViewById(R.id.image);

image.setImageResource(this.id);

// 2 给按钮绑定事件,以后点击按钮,就会执行

button01.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

// 点击一次,弹出个吐司

Toast.makeText(MainActivity.this, "换美女了", Toast.LENGTH_LONG).show();

// 点一下按钮,id变量,切换一下

if (id == R.drawable.a) {

id = R.drawable.b;

} else if (id == R.drawable.b) {

id = R.drawable.c;

} else {

id = R.drawable.a;

}

image.setImageResource(id);

}

});

}

}

3.3 res-drawable-放图片

4 显示网络图片--比较麻烦

# 安卓的网络加载,必须开启一个新的线程去做,主线程负责更新ui

# 1 手机要能上网

# 2 代理关闭

# 3 AndroidManifest.xml配置上网权限

xmlns:tools="http://schemas.android.com/tools">

package com.justin.s9demo01;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.Toast;

import java.net.URL;

public class MainActivity extends AppCompatActivity {

private Button button01; // 用来接受页面中的button

private ImageView image; // 用来接受页面中的Image

private int id = R.drawable.a;

private URL url = null;

private Bitmap bitmap = null;

// @Override

// protected void onCreate(Bundle savedInstanceState) {

// super.onCreate(savedInstanceState);

// setContentView(R.layout.activity_main); // 让这个java文件跟activity_main.xml对应上

// //1 取到页面中的button和image

// button01 = findViewById(R.id.button); // 去activity_main根据id找组件

// image = findViewById(R.id.image);

// image.setImageResource(this.id);

// // 2 给按钮绑定事件,以后点击按钮,就会执行

// button01.setOnClickListener(new View.OnClickListener() {

// @Override

// public void onClick(View view) {

// // 点击一次,弹出个吐司

// Toast.makeText(MainActivity.this, "换美女了", Toast.LENGTH_LONG).show();

// // 点一下按钮,id变量,切换一下

// if (id == R.drawable.a) {

// id = R.drawable.b;

// } else if (id == R.drawable.b) {

// id = R.drawable.c;

// } else {

// id = R.drawable.a;

// }

//

// image.setImageResource(id);

// }

// });

//

//

// }

// 加载网络图片

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main); // 让这个java文件跟activity_main.xml对应上

//1 取到页面中的button和image

button01 = findViewById(R.id.button); // 去activity_main根据id找组件

image = findViewById(R.id.image);

image.setImageResource(this.id);

// 2 给按钮绑定事件,以后点击按钮,就会执行

button01.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

// 点击一次,弹出个吐司

Toast.makeText(MainActivity.this, "换美女了", Toast.LENGTH_LONG).show();

try {

url = new URL("https://lmg.jj20.com/up/allimg/tx28/03102423387976.png");

requestImage(url);

} catch (Exception e) {

Log.e("justin", e.toString());

}

}

});

}

private void requestImage(URL url) {

// 开启新线程加载网络图片

new Thread() {

@Override

public void run() {

try {

bitmap = BitmapFactory.decodeStream(url.openStream());

showImg();

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

private void showImg() {

// 更新ui,必须在主线程中

runOnUiThread(new Runnable() {

@Override

public void run() {

image.setImageBitmap(bitmap);

}

});

}

}

5 逆向自己的app

# 1 把编译好的apk,拿出来

# 2 使用jadx打开

-找到com.justin.s9demo01.MainActivity

相关推荐