恭喜大家都还能活到这节课,从现在开始我们进入Android的学习,前面Java没学会的也不要紧,在以后的学习中就能慢慢理解了,接下来开始起飞。
![]()
安装Android Studio
工欲善其事,必先利其器。在学习之前,这里有份史诗级新手装备待你领取,它叫AS。
- 和IDEA一样,进入ToolBox下载
- 打开AS,选择不导入
不向谷歌发送,下一步
先不设置代理,下一步
有梯子的同学可以设置代理
选择标准安装,下一步
选择主题,下一步
下一步,接受条款,下一步

等待下载,然后点击Finish
等待时间较长,觉得慢用流量开热点,这校园网太垃圾!
安装完成,接下来开始你的第一个APP🎉
注:从AS是纯英文版,汉化插件需要自己去找,不推荐使用汉化,以后的很多文档都是英文的,各位需打好英语基础。
第一个APP
新建一个项目
选择Empty Activity,点击下一步
其他Activity有很多模板代码,我们也用不到
选择Java语言,安卓兼容最低版本为安卓7
目前市场上大部分安卓版本都在安卓7以上,只有小部分还是安卓5,我们不用去管它
等待下载完成
等待时间较长,觉得慢用流量开热点,这校园网太垃圾!
运行第一个App,点击绿色的三角
Pixel_3a_API_33_x86_64是我们在AS的模拟器
等一会就运行成功了🎉
刚才那个是在模拟器上运行,实际上,我们一般选择用真机调试,因为模拟器上有一些奇怪的bug,而且轻薄本用模拟器会卡🥀
手机打开usb调试,以小米手机为例:连续点击MIUI版本7下,开启开发者选项,打开USB调试

用数据线连接电脑
第一次连接会提示你配对,点确定就好了
然后AS上会显示你的设备
点击绿三角运行
手机上同意通过USB安装应用
你成功在手机上运行了自己的APP🎉🎉🎉

推荐书籍
在此推荐真正的郭神写的书:《第一行代码》第二版(由于该书时间发行较久,可能不好买到一手。群里有 pdf)
![]()
别买到蓝色的第三版了
![]()
第三版全部用的 kotlin,里面虽然也有一些 kotlin 的语法讲解,但你们目前阶段对于 java 掌握不牢固,不适合去学习 kotlin
书中的坑
由于 Android 一年一个版本,所以书中很多教程到现在都已经很旧了,在此提一些坑
support 导包问题
![]()
书中在讲一些导包时都会让你们像上图一样导入
suport包,目前该包已被官方停止维护,且已经迁移至androidx的包。这是目前的androidx包,报黄的原因是可以升级了,鼠标移过去就可以升级
![]()
![]()
在这里我建议在代码中直接输入要使用的控件的全名,再使用 Alt + Enter,AS 会自动帮你导包,对于 build.gradle 文件不建议你们修改
例如:导入
RecyclerView可以直接在代码中写,在选择后 AS 会自动帮你导包![]()
但仍存在部分控件或者依赖 AS 也不知道的情况,这时就需要你们自己谷歌找最新的依赖包了
XML简单介绍
什么是XML
XML (eXtensible Markup Language)指可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。
XML的用途
xml被用于信息的记录和传递,因此xml经常被用于充当配置文件。在Android中,res文件下和manifest使用的是xml语言
XML 仅仅是纯文本
XML 没什么特别的,它仅仅是纯文本而已,所以res下的文件需要受到java下的代码调用。XML的格式
XML 文档第一行以 XML 声明开始,用来表述文档的一些信息
1
2
3
4
5
6
7
<site>
<name>Redrock</name>
<url>https://redrock.team</url>
<logo>redrock.png</logo>
<desc>红岩网校工作站</desc>
</site>、 、 、 分别为标签,标签内包含了要传递的信息。 标签必须成对出现,有开始标签就需要有结束标签,例如:开始标签:**
** 和 结束标签:** **标签是有层级的,必须正确的嵌套;
标签区分大小写;
xml属性值必须加引号,例
1
2
3<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Android 项目结构
Android 与之前 Java 的一个项目相比复杂了许多,下面我们先简单认识一下。
结构视图有
Project和Android两种,Project就是以文件夹的形式展示,Android是编译后更方便的一种展示。![]()
谷歌爸爸为了使我们的应用更好开发,把代码与视图进行了分层,主要的结构视图如下:(在 Android 视图下):
- java下面写我们的逻辑代码,就和以前我们在src里写的一样
- res是写布局代码,包括一些图片,布局,主题,颜色等等。
- gradle是项目构建,目前我们不用管
![]()
manifests
用来放
AndroidManifests.xml简称“注册文件”![]()
注:但由于Android12的问题,目前需要在启动的
activity的标签新加一句android:exported=”true”,它的作用是:是否支持其它应用调用当前组件java
你的所有用于控制视图的代码都在这里
第一个包就是你的源代码 java 文件,后面两个包是有关测试的,不用去了解,之后的个人开发也不会用到他们,网校开发也没有用到
res
用于放视图和资源文件
drawable
用于放图片资源以及 xml 类型的图片
layout
用于放应用中每个界面的地方
mipmap
这里只用来放应用的桌面图标的(注:这里一般不是用来放应用内部图片或者图标的,该文件夹一般不用)
values
用于放一些引用的文字或者颜色等杂东西
认识HelloWorld
相信各位都想自己开始动手改写 HelloWorld,但一打开 java 代码却傻了眼,这都是些什么鬼?
![]()
java 代码讲解
你一看MainActivity继承于 AppCompatActivity,然后点进去一看,666 行的英文,什么也看不懂。
其实不用管这么多,就跟你们开始学习 java 一样,只要记住之前的
main()是整个程序的入口,在 Android 中这个入口“变成了”onCreated()(其实入口并不是它)以后代码就 “全” 写在onCreated()中就可以了(别真的把代码全写在一个函数中了!)关键语句 setContentView()
细心的你肯定能发现除了
super.onCreate()外,他还自己多写了一个setContentView(R.layout.activity_main)。setContentView 字面意思就是:设置内容视图
前面我们讲过 Android 将
视图与代码进行了分离,而这就话就是将视图与代码进行判定,其中 R.layout 是一种固定写法,用于引用layout文件夹中的文件(tips: 同理,R.drawable表示引用drawable文件夹中的图片)layout 中的 XML
点击
activity_main后肯定更懵逼了,这又是写的什么?(555,我还是退学吧!)![]()
目前可以死记住需要这样写即可
但我还是给大家简单梳理下:
![]()
其中 2 ~ 8 行是一体的(严格来说还包括第19行),描绘了一个在
androidx.constraintlayout.widget下一个叫ConstraintLayout的控件的行为(何为控件?后面会讲)同理,这个是一个名字叫
TextView的控件![]()
其中第 13 行有一个 “Hello World!”,我们把他改成 “Hello RedRock!”,再打包运行一下,你就会发现应用的字变成了 “Hello Redrock!”
简单的认识了HelloWorld后,我们接下来进行更细致的讲解
视图的基本单位——控件
控件中分为单一的,用于与用户交互的控件 (View) 和 负责布局的控件 (ViewGroup)
View
常用的 View
TextView
一个用于显示文本的控件
自身属性 作用 android:text 设置显示的文字 android:textSize 设置字体大小 android:textStyle 设置字体样式(只有加粗和斜体) android:fontFamily 设置文字的字体 app:drawableStartCompat 设置文字左边的图片(类似的可以把 Start 换成 Top、Bottom、End) 如果要设置一个图片在
TextView旁边,尽量使用 app:drawableStartCompat 属性,而不是写一个ImageView在旁边Button
一个与用户进行交互的按钮(注意:并不是只有
Button可以点击,所有的 View 都可以设置点击监听)
自身属性 作用 所有 TestView 的属性 因为 Button是直接继承于TestView的,所以拥有所有TestView的属性EditText
一个与用户进行交互的输入控件
自身属性 作用 所有 TestView 的属性 因为 EditText 也是直接继承于 TestView 的,所有拥有所有 TestView 的属性 android:hint 设置提示文字 android:textColorHint 设置提示文字颜色 android:inputType 设置输入的类型 android:digits 设置值接受指定的文本内容 android:lines 设置显示行数 android:maxLines 设置最大显示行数 (简单提一句:其实后面几个属性也不是
EditText独有的)ImageView
一个显示图片的控件
属性 作用 android:src 设置(前景)图片 android:scaleType 设置当图片与控件大小不一致时缩放模式 如何添加图片:
普通图片
直接将图片放到res/drawable目录下即可
矢量图
推荐一个矢量图网站:阿里巴巴矢量图标库,里面有很多好看的图标,而且是免费的。
先下载SVG图片,保存到你自己能找到的地方
![]()
在res文件夹下新建一个Vector Asset
![]()
选择加载本地资源,找到你的图片
![]()
![]()
调整一些参数
![]()
完成
补充书没有的内容
scaleType
推荐博客:scaleType 的使用
一般使用 centeInside 模式,当 size 大于ImageView的图片进行等比例缩小,小于ImageView的图片不变,直接居中显示。(当不写该属性时,默认是fitCenter意思是当 size 大于ImageView的图片进行等比例缩小,小于ImageView的图片进行等比例放大,直接居中显示)ShapeableImageView
如果想实现圆头像或者其他样式的头像,可以试试这个控件
常用属性
android:layout_margin 与 padding
初学者往往会搞不懂这两个的含义
其中 layout_margin 是以父布局为参考系,设置外部边距
**padding **是以自身为参考系设置设置内部子 View 或者文本等边距
android:background
设置背景(与
ImageView的 android:src 不同,src 是设置前景,可以选择缩放模式,而 background 是设置背景,是直接强行拉伸或者压缩图片)Material组件库
Material Design 是由Google开发设计,扩展于Google即时的“卡片”设计,材质设计基于网格的布局、响应动画与过渡、填充、深度效果(如光线和阴影)。
强烈建议你们下载下来,里面有很多好看的控件,直接拿来用。
ViewGroup
ViewGroup被翻译成容器,他的作用就是用来装TextView、Button这些控件的基础 ViewGroup
以下简单讲解你们现阶段会用到的
ViewGroup,由于《第一行代码》中有关于这些的演示和讲解,所以这次课我更多的是进行实践操作LinearLayout
页数:《第一行代码》P94页
该布局在入门阶段最常用
自身属性 作用 android:orientation 设置排列方向
子控件属性 作用 android:layout_gravity 设置子控件在父控件中的位置 android:layout_weight 设置子控件在父控件中的比重 子控件属性?父布局可以额外添加子控件的属性的,其中有个明显的特点就是,属性都以
layout_开头.RelativeLayout
页数:《第一行代码》P100页
该布局不常使用,跳过
FramLayout
页数:《第一行代码》P103页
该布局在入门阶段一般不用,跳过(一般在自定义 View 中用的多,通过继承它来实现自己的控件)
CardView
页数:《第一行代码》P431页
该布局后期很常用,这里做一些补充
自身属性 作用 app:cardCornerRadius 设置圆角 app:elevation 设置阴影厚度(也指 Z 轴高度) app:cardBackgroundColor 设置背景颜色(注意:该控件使用 android:background 来改变背景颜色是无效的,需要换成左边这个属性) app:cardPreventCornerOverlap 显示完整阴影(如果你的阴影厚度较厚,你会发现你的阴影只显示了部分,使用该属性可以将阴影显示完整) app:contentPadding 设置内容的 poadding(间距),除此之外还有app:contentPaddingLeft/Right/Top/Botom 用于复杂布局时的 ConstraintLayout
该布局为最常用布局,而且现在AS默认的布局就是ConstraintLayout布局,只需要简单的一拖一拉,就能实现比
LinearLayout、RelativeLayout更强大的效果。这里直接推荐看博客内容:约束布局
也许你们觉得写这些好麻烦,其实,这些多用即便就记住了,还有就是我们可以直接使用 XML 中的 Design 窗口用鼠标来拖动,具体的使用会在课上演示
常用属性
android:gravity
部分
ViewGroup拥有该属性,用于设置子控件的重心控件这么多的属性我该怎么记?
其实你根本不用记住,直接照书抄就是了,后面你想找某个属性,推荐先去 Android 官网(点我进官网,就是你下 AS 的地方)找找,再去百度看他的用法,只要你用得多了,自然而然就记住这些属性了
其他
命名规范
id 命名规范
具体可参考群里的《阿里巴巴Android开发手册》
![]()
除此之外,还有如下命名规范:
【模块名】_【控件】_【界面位置】_【作用】
模块名:目前你们还设计不到模块相关,可以不用写
控件名:常见的控件可采用首字母缩写的形式,自定义控件和不常用的建议全写
界面位置:简单的描述是哪个界面,如下图的
stamp_detail表示邮票详细界面(可以加上 activity、fragment、item 等字眼用于表示控件所在的容器)作用:如果当前界面相同控件过多,强烈建议加上作用
大致以上面这样来写 id,这样更利于快速查找,也会让之后的学弟不会对你的代码留下什么印象 : )
控件对象命名规范
虽然是 kt 写得,但各位应该能看懂
【控件缩写】+【作用】
这里提一句,为什么以 m 开头,因为 Android 官方推荐类中的成员变量以 m 开头,你几乎可以在 Android 官方源码中都能发现这种写法,建议遵守官方规范
现搓一个登录界面
光听这些估计很无聊,接下来我将现搓一个登陆界面,写登录界面是这次作业中的 Lv2,各位可以用心听一下
布局代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 >
><androidx.constraintlayout.widget.ConstraintLayout 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">
<ImageView
android:id="@+id/img_main_head"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="128dp"
android:src="@drawable/cqupt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/et_main_username"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:drawableStart="@drawable/ic_baseline_account_box_24"
android:hint="账号"
android:inputType="number"
android:lines="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/img_main_head" />
<EditText
android:id="@+id/et_main_password"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ?!=+-_.,"
android:drawableStart="@drawable/ic_baseline_vpn_key_24"
android:hint="密码"
android:inputType="textPassword"
android:lines="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_main_username" />
<Button
android:id="@+id/btn_main_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:text="登录"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_main_password" />
></androidx.constraintlayout.widget.ConstraintLayout>Activity代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 >public class LoginActivity extends AppCompatActivity {
private ImageView mImgHead;
private EditText mEtUsername;
private EditText mEtPassword;
private Button mBtnLogin;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
initLogin();
}
/**
* 写一个方法专门用于初始化 View
*/
private void initView() {
mImgHead = findViewById(R.id.img_main_head);
mEtUsername = findViewById(R.id.et_main_username);
mEtPassword = findViewById(R.id.et_main_password);
mBtnLogin = findViewById(R.id.btn_main_login);
}
/**
* 专门用于登录的方法
*/
private void initLogin() {
mBtnLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
login();
}
});
}
/**
* 执行登录操作
*/
private void login() {
String username = mEtUsername.getText().toString();
String password = mEtPassword.getText().toString();
if (username.equals("123456") && password.equals("123456")) {
loginSuccess(username, password);
} else {
loginFailure();
}
}
/**
* 登录成功的方法
*/
private void loginSuccess(String username, String password) {
Toast.makeText(this, "登陆成功!", Toast.LENGTH_SHORT).show();
MainActivity2.startActivity(this, username, password);
}
/**
* 登录失败的方法
*/
private void loginFailure() {
Toast.makeText(this, "账号或者密码好像输错了 :(", Toast.LENGTH_SHORT).show();
}
private long mExitTime = 0L;
/**
* 以下为连按两次才能退出
*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
/*
* 当当前时间大于上次按返回键的时间 2 秒时
*/
if (System.currentTimeMillis() - mExitTime > 2000) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
return false;
}
}
return super.onKeyDown(keyCode, event);
}
}再写一个 Activity
这就写完了?这也太简单了吧,简直有手就行。接下来我们给这个界面加上登录后的跳转
![]()
intent 跳转
页数:《第一行代码》P41 ~ P43
只需要使用显示 Intent 就可以了,就两行代码
1
2 Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);对于 Intent 的正确写法(以下为扩展内容,听不懂没事)
如果我们要传入一些数据给
ContentActivity时,一般我们会在MainActivity直接这样写
1
2
3
4 Intent intent = new Intent(this, ContentActivity.class);
intent.putExtra("username", username);
intent.putExtra("password", password);
startActivity(intent);这样写确实很方便,也没有什么问题
但在之后的开发中,我们更推荐将启动事件交给要启动的类来处理,这样可以实现类与类之间的解耦合
应该在
MainActivity2中写一个 static 的方法用于启动自己,让它来决定你该传入什么数据才能启动它
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 >public class MainActivity2 extends AppCompatActivity {
private static final String INTENT_USER_NAME = "username"; // intent 中的数据标记
private static final String INTENT_PASSWORD = "password"; // intent 中的数据标记
/**
* 写一个 static 方法,让它来决定该传入那些数据
*/
public static void startActivity(Context context, String username, String password) {
Intent intent = new Intent(context, MainActivity2.class);
intent.putExtra(INTENT_USER_NAME, username);
intent.putExtra(INTENT_PASSWORD, password);
context.startActivity(intent);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Intent intent = getIntent();
String mUserName = intent.getStringExtra(INTENT_USER_NAME);
String mPassword = intent.getStringExtra(INTENT_PASSWORD);
}
}那么在
LoginActivity中可以直接一行代码启动MainActivity2
1 MainActivity2.startActivity(this, username, password);这样的写法在写大项目时是必须遵守的,写在这里只是为了让你们提前知道有这个规范
补充启动界面
注册文件改默认启动
页数:《第一行代码》P35 最底部
1
2
3
4 <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>上面这一行代码就是设置启动
Activity的只需要把它改到你想设置的
Activity里,在Android12中,默认启动activity必需要设置android:exported="true"![]()
Activity 的 finish() 方法
页数:《第一行代码》P40 最底部
调用该方法会直接销毁当前
Activity,并移出Activity栈(Activity 栈的概念可以看书 P53)
扩展内容
Activity
是什么?
相信在写了上面懵懵懂懂的代码后,你也对 Activity 有了一个初步的认识。
如果说 XML 布局是应用的外表,那么 Activity 就是应用的内核,用于控制 XML(外表) 实时变化,达到与用户交流的目的
其中一个 Activity 掌管了一个对应的 XML 布局,XML 布局中的控件,都可以使用
findViewById()这个方法转换成对应的一个对象,然后 Activity 就可以直接调用这些对象自带的方法用于设置一些属性Activity 启动模式
页数:《第一行代码》P63
这东西平时不会经常用到,使用也很简单,你们下去看一下书就能理解了。主要用于使用返回键退出当前 Activity 或者 Activity 互相启动时会用到
Fragment
页数:《第一行代码》P142
Fragment 可以理解为一个小型的 Activity,它也可以向 Activity 一样,与 XML 视图进行一对一绑定,但它必须寄生于一个 Activity 中,不能独立存在
不讲内容
该部分内容对于你们目前阶段难以理解,故写在这里,现在只作了解即可,之后会再来详细讲解
Activity 生命周期
页数:《第一行代码》P53页
下学期会进行更深入的讲解,再加上目前你们涉及不到这个,所以就不写这个了
Fragment 生命周期
页数:《第一行代码》P151
与 Activity 生命周期类似,这节课也不会讲解该内容
FragmentManger
页数:《第一行代码》P147
Activity 中 Fragment 的管理者
补充问题
设置字体大小
AS默认的字体有点小,我们设置一下
窗口字号设置
File - Settings - Appearance 注意:这个只能设置除代码外的字体大小,也就是窗口字体大小
代码字体设置
File - Settings - Editor - Font 这里才是设置代码字体大小的地方
Ctrl + 滑轮 设置代码字号
File - Settings - Editor - General 开启 Ctrl + 滑轮设置字体大小很有用
快捷键设置
相信在写 java 中直接输 sout 而感到十分方便,其实这些都是可以自己去设置的
下面给出一个可以快捷打出 Log.d 的快捷键的设置方式
- 打开设置
![]()
基本设置
![]()
1
2
3 android.util.Log.d("TAG","($class$:$line$)-->>");
// TAG: 换成你自己想设置的 tag(用于过滤 Log,快速找到)
// $class$、$line$: 固定写法设置属性
![]()
设置语言
![]()
OK,接下来你可以在代码中直接输入 “ld” 然后回车,实现 sout 一样的效果
经过了这个教程后,相信你也可以设置其他快捷键了.
推荐插件
装上一些插件可以很大部分上提高我们工作效率,在这里分享给大家几个插件
插件在这里下载:
![]()
Translation
![]()
一个很好用的翻译插件,对于英文注释来说可以直接翻译成中文
使用方式:选中英文后直接 Ctrl + Shift + Y,也可以直接翻译文档
![]()
注:谷歌翻译停止中国访问,该服务需要梯子,或者使用替他翻译引擎。
如果挂了梯子还显示这个就需要设置代理
这里可以替换其他搜索引擎
Rainbow Brackets
![]()
括号总是白色,太难找到对应?试试这款插件,让你代码中的括号充满色彩!
如何打包
当手机装上了你自己的App,你也想分享给其他小伙伴一起使用,可是当你发现通过qq发送给别人的时候,他们安装不了,因为我们手机是通过AS直接装的,不是正式的apk。
打开Build -> Generate Signed Bundle / APK…
选择apk,点击next
创建签名文件
生成 apk 需要签名文件,这个签名文件主要是用于检测当前 apk 是否已经被修改。比如你通过反编译修改了我的 apk,那么签名文件就会被破坏,其他人就可以通过签名文件来判断是否被修改
选择relsase包
查看apk

AS彻底卸载
时间长了AS会出现一些奇怪的问题,我们就需要彻底卸载AS了
在设置里卸载AS
打开下面这个路径,删除所有与 AS 有关的即可
C:\Users\WhiteNight\AppData\Roaming\Google
注1:图中的 “WhiteNight” 是电脑的用户名,打开你自己的用户目录
注2:其中 “AppData” 为隐藏文件夹,自己打开显示隐藏文件夹即可找到
如果你想弃坑 Android 了 ,就可以把 gradle 删了🥀
更改gradle路径
AS下载的gradle路径是在C盘的(如上图),到了后期gradle文件会越来越大,C盘会爆满,我们将它移到其他盘
1.打开“系统高级设置”,选择“环境变量”
- 找到GRADLE_USER_HOME
- 选择你想存放的地方
- 确定保存
梯子的问题
github和goole需要梯子,搞计算机的,梯子是必不可少的,你们可以自己去找梯子,也可以私下找我们。
设置代理
如果你有梯子的话可以给AS设置代理,这样可以在AS里访问外网(例如谷歌翻译)
打开设置,找到HTTP Proxy,选择手动代理设置,方式选择HTTP,地址默认就是
127.0.0.1,端口号可以到Windows的设置->网络和Internet->代理->手动代理设置->编辑,点击编辑就能看到端口号了
总结
本节课我们主要学习了Android Studio的使用,掌握了一些常用控件和布局,对Activity也有了一些认识。
在经历了这半学期的学习后,相信你们从网校这里学习到了很多,还记得开始入群时有500多人,到现在只有少数人在活跃,希望在接下来的路,你们能坚持走完,最后回头来看你会感谢如今的自己。












