AndroidStudio

一 安卓开发环境搭建
1.1 环境介绍
# 做安卓开发,需要会 Java 开发,需要安卓 SDK ,需要一款编辑器,需要软件测试环境 ( 真机,虚拟机 )
# 早期开发安卓 app ,需要使用 eclipse+ 安卓 SDK ,自己搭建
# 目前开发安卓 app ,只需安装 AndroidStudio ,可以直接通过 AndroidStudio 下载 SDK
# 编写完的代码要运行
- 使用 AndroidStudio 自带的安卓虚拟机
- 使用网易 mumu ,夜神模拟器等虚拟机
- 使用真机(推荐),只要是安卓手机,开发 usb 调试,不需要 root 就可以使用
1.1 安卓集成开发环境
1.1.1 下载 AndroidStudio
# 官方下载
# 历史版本下载
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
# 项目构建工具介绍
Gradle Maven 都是 Java 项目的构建工具,但它们有一些区别:
1. 语法: Gradle 使用 Groovy 语言进行编写,而 Maven 使用 XML Groovy 更加灵活易读, XML 更加严谨易于
用。
2. 性能: Gradle Maven 更加高效快速,因为它使用了增量构建模式,只会重新构建被更改的模块,而 Mav
则需要重新构建整个项目。
3. 插件: Gradle 的插件生态更加丰富和现代化,而 Maven 的插件相对较为传统。此外, Gradle 的插件可以非
容易地编写和定制,而 Maven 的插件相对繁琐。
4. 维护: Maven 有比较成熟的工具链和文档支持,而 Gradle 则相对较新,可能需要更多的自学
# Groovy 介绍 Groovy 是一种基于 JVM Java 虚拟机)的敏捷开发语言,它结合了 Python Ruby Smalltalk 的许多强大
特性, Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码
1.1.2 安装 AndriodStudio
# 安装 Android 步骤很简单,一路下一步即可
# 注意中间需要选择是否安装安装虚拟机(可以选择安装也可以不安装),如果使用真机调试,就不需要安卓虚
拟机
# 注意选择安装路径
1.1.5 配置环境变量
# SDK 的安装目录下,有很多文件夹,如下
我们把 emulator paltform - tools 目录加入到环境变量
── . gradle #AndroidStudio 自动生成的文件,会自动修改它的,
目打包时也会删除;
├── . idea # AndroidStudio 自动生成的文件,会自动修改它的,
目打包时也会删除;
├── app # 应用相关的东西都在里面,工作的核心目录
│ ├── build # 编译的产物。某些情况下,可以手动把它整个删掉。
│ ├── libs # 依赖包可以放这里,比如一些 jar 文件。
│ ├── 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 # 很重要。项目级的配置。俗称 项目 grad
文件
├── gradle . properties # 全局的 gradle 配置文件 ├── gradlew # Linux/mac 上执行 gradle 命令
├── gradlew . bat # Windows 上执行 gradle 命令
├── local . properties # 本地配置文件,一般不上传
└── settings . gradle # gralde 的项目级配置
<?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"
tools:context = ".MainActivity" >
<LinearLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "#dddddd"
android:orientation = "vertical" >
<ImageView
android:layout_width = "match_parent"
android:id = "@+id/image"
android:layout_height = "300dp"
android:src = "@color/pink" />
<Button
android:layout_width = "match_parent"
android:layout_height = "wrap_content" android:id = "@+id/button01"
android:text = " 点击更换美女 " ></Button>
</LinearLayout>
</LinearLayout>
3.3 java(MainActivity.java)
package com.justin.justinapp;
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;
private ImageView image ;
private int id=R.drawable.a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button01=findViewById(R.id.button01);
image=findViewById(R.id.image);
button01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"弹出吐
司",Toast.LENGTH_LONG).show();
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);
}
});
}
}# 安卓的网络加载,必须开启一个新的线程去做,主线程负责更新ui
# 1 手机要能上网
# 2 代理关闭
# 3 AndroidManifest.xml配置上网权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
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.xm
对应上
//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);
}
});
}
}

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

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

相关文章

三.Winform使用Webview2加载本地HTML页面

Winform使用Webview2加载本地HTML页面 往期目录创建Demo2界面创建HTML页面在Demo2窗体上添加WebView2和按钮加载HTML查看效果 往期目录 往期相关文章目录 专栏目录 创建Demo2界面 经过前面两小节 一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定…

三国游戏(第十四届蓝桥杯)

题目 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z&#xff08;一开始可以认为都为 0&#xff09;。 游戏有 n个可能会发生的事件&#xff0c;每个事件之间相互独立且最多只会发生一次&#xff0c;当第 i个事件发生时会分别让 X,Y,Z 增加 A i , B…

广和通AI解决方案“智”赋室外机器人迈向新天地!

大模型趋势下&#xff0c;行业机器人将具备更完善的交互与自主能力&#xff0c;逐步迈向AI 2.0时代&#xff0c;成为人工智能技术全面爆发的重要基础。随着行业智能化&#xff0c;更多机器人应用将从“室内”走向“室外”&#xff0c;承担更多高风险、高智能工作。复杂的室外环…

Java基本概念(新手入门)

目录 软件安装&#xff1a;Java初学者软件安装与idea快捷键-CSDN博客 第一节 1.java与C语言的区别 2.jdk&#xff0c;jre&#xff0c;jvm是什么&#xff0c;他们之间的关系 3. java的包package 4.Java的注释 5.第一个程序讲解与基础语法 6.一带而过 java入门第一节__…

方便又好用,必须吹爆这几个良心工具!

生成式人工智能已经彻底改变了各个行业。尽管使用的都是相同的大模型&#xff0c;但有的能让明星表演出“科目三”&#xff0c;而有的则能将真人变成动漫主角。 那么&#xff0c;让我们回到开发人员的视角来看&#xff0c;GenAI对日常工作会有哪些影响呢&#xff1f;虽然我们向…

代码随想录二刷 | 二叉树 | 把二叉搜索树转换为累加树

代码随想录二刷 &#xff5c; 二叉树 &#xff5c; 把二叉搜索树转换为累加树 题目描述解题思路递归法迭代法 代码实现递归法迭代法 题目描述 538.把二叉搜索树转换为累加树 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&…

分布式 session

分布式 session 种 session 的时候需要注意范围&#xff0c;也就是 cookie.domain。 比如两个域名&#xff1a;a.heo.com&#xff0c;b.heo.com。如果要共享 cookie&#xff0c;可以种一个更高层的公共域名&#xff0c;比如 heo.com。 当服务器 A &#xff08;localhost:808…

基于ECS服务器搭建FTP服务

vsftpd&#xff08;very secure FTP daemon&#xff09;是一款在Linux发行版中最受推崇的FTP服务器。vsftpd支持匿名访问和本地用户模式两种访问方式。匿名访问方式任何用户都可以访问搭建的FTP服务&#xff1b;本地用户模式只支持添加的本地用户访问搭建的FTP服务。 说明: 匿…

前端实现贪吃蛇功能

大家都玩过贪吃蛇小游戏&#xff0c;控制一条蛇去吃食物&#xff0c;然后蛇在吃到食物后会变大。本篇博客将会实现贪吃蛇小游戏的功能。 1.实现效果 2.整体布局 /*** 游戏区域样式*/ const gameBoardStyle {gridTemplateColumns: repeat(${width}, 1fr),gridTemplateRows: re…

新买电脑配置不低却卡顿?

目录 前言&#xff1a; 电脑卡顿的原因 Windows 10必做的系统优化 禁用 IP Helper 关闭系统通知 机械硬盘开启优化驱动器功能 开启存储感知 前言&#xff1a; 新买的电脑配置不低&#xff0c;但却卡顿甚至程序不反应&#xff0c;这是怎么回事儿&#xff1f; 其实并不…

代码随想录day32 贪心算法训练

122.买卖股票的最佳时机 II 题目 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。 注意&#xff1a;你不能同时参与多笔交易&a…

Java中泛型的详细介绍

引言&#xff1a; Java语言中的泛型是一种强大的特性&#xff0c;它允许我们在编写代码时指定类、接口和方法的参数类型。通过使用泛型&#xff0c;我们可以提高代码的重用性、可读性和安全性。在本博客中&#xff0c;我们将详细介绍Java中泛型的知识。 一、泛型的基本概念 泛型…

《Linux C编程实战》笔记:Linux信号介绍

信号是一种软件中断&#xff0c;它提供了处理一种异步事件的方法&#xff0c;也是进程惟一的异步通信方式。在Linux系统中&#xff0c;根据POSIX标准扩展的信号机制&#xff0c;不仅可以用来通知某进程发生了什么事&#xff0c;还可以给进程传递数据。 信号的来源 信号的来源…

信号处理专题设计-基于边缘检测的数字图像分类识别

目录 一、实验目的 二、实验要求 三、实验原理 1.卷积神经网络&#xff08;CNN&#xff09;模型 2.边缘检测 3.形态学操作 4.鲁棒性 四、实验过程 1.数据预处理 2. 网络的构建 3.模型的训练 4.边缘检测和形态学操作相关代码 5.模型训练结果 6.关键信息的保存 五、实验测试与评估…

【LeetCode】150. 逆波兰表达式求值(中等)——代码随想录算法训练营Day11

题目链接&#xff1a;150. 逆波兰表达式求值 题目描述 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算…

竞赛保研 机器视觉人体跌倒检测系统 - opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…

【蓝桥杯日记】复盘第一篇——顺序结构

&#x1f680;前言 本期是一篇关于顺序结构的题目的复盘,通过复盘基础知识&#xff0c;进而把基础知识学习牢固&#xff01;通过例题而进行复习基础知识。 &#x1f6a9;目录 前言 1.字符三角形 分析&#xff1a; 知识点&#xff1a; 代码如下 2. 字母转换 题目分析: 知…

C语言·预处理详解

1. 预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的 __FILE__ 进行编译的源文件 __LINE__ 文件当前的行号 __DATE__ 文件被编译的日期 __TIME__ 文件被编译的时间 __STDC__ 如果编译器遵循ANSI C&#xff0c;…

SpringCloud Aliba-Sentinel【下篇】-从入门到学废【6】

&#x1f929;java小课堂&#x1f929; &#x1f32d;&#x1f32d;&#x1f32d; 和 equals 的区别是什么&#xff1f;&#x1f979;&#x1f979;&#x1f979; 对于基本类型&#xff0c; 比较的是值&#xff1b;对于引用类型&#xff0c;比较的是地址&#xff1b;equals不能…

【现代密码学基础】详解完美安全与不可区分安全

目录 一. 介绍 二. 不可区分性试验 三. 不可区分性与完美安全 四. 例题 五. 小结 一. 介绍 敌手完美不可区分&#xff0c;英文写做perfect adversarial indistinguishability&#xff0c;其中adversarial经常被省略不写&#xff0c;在密码学的论文中经常被简称为IND安全。…