Android开发学习手记:从零开始学习android开发(二):尝试上手第一个App:HelloWorld_安卓开发b站天哥在奔跑-程序员宅基地

技术标签: android  我的安卓开发学习手记  

(By Mokiki)
“Hello World”,一定是每个程序员都不陌生的词,我们从这里开始,正式进入Android开发的学习旅程。

安卓开发的相关学习视频很多,目前我选择的是B站上up主“天哥在奔跑”录制的Android Studio开发教程视频,视频链接放在下面。
链接:我所参考的视频教程链接_by天哥在奔跑
本篇手记的学习路径也与这个教程中的顺序一致。
手记的主要内容包括相关内容和实际学习过程中遇到的一些视频中没有介绍的问题解决过程的记录,此外视频中对语言这部分基本没做详细介绍(我目前所看到的是这样)手记中尝试对代码也做一定的理解。

很不成熟的学前建议:
如果有一定其他语言编程基础(如C++),尤其是对面向对象编程的部分有很好的理解,那么理解代码也不算是非常困难的事,因为Java语言面向对象的特征非常明显,这一点在学习过程中深有体会。
此外,如果有过微信小程序的开发经验对安卓开发也有一定帮助,因为微信小程序的很多特性也都是参考了安卓程序的。

现在,我们正式开始学习!

一:创建一个新的工程文件

点开图标,运行Android Studio软件,你会看到这个页面)

啊…对了忘了说,这软件是全英文的,进去也是全英文的…不过大部分常用功能还是能够看懂的,而且顺带学英语了不是…(开个玩笑)如果在Windows下能比较容易的下载汉化补丁把软件汉化,但是Mac下就不太好操作,而且害怕破坏了原本的软件,得不偿失,所以我也没进行汉化这个危险的尝试。

显然通过这个页面我们很明白就能看懂点哪一个能新建工程文件,点击加号后面的选项,我们创建一个新的工程文件。点开后你会看到这个页面:
第一步:选择模版

AS为开发者提供了丰富的Activity模版,包含一些常用的底部分栏Activity,地图Activity等等,开发过程中如有需要可以选用。

我们选择Phone and Tablet选项卡下的Empty Activity选项,这样一会我们建好的工程文件中将存在一个已经可以直接使用的空白Activity,最后点Next进入下一步。

第二步:具体设置
在这个页面上我们需要依次设置如下信息

  1. Name:指这个工程文件的名称,在这里给你这个工程文件起一个名字。
  2. Package Name:包名。如果一个app想提交进入应用商店时,包名可能会被作为唯一的识别标识。它将是你的app被打包后的名字。包名采用的是反域名命名规则,一般一级为com,二级为个人或公司的名字,三级为应用的名字。根据这个规则我们把应用包名设置为:com.mokiki.helloworld
    *反域名命名规则:就是把域名反过来写,比如手机QQ的包名是com.tencent.mobileqq,那其实域名是mobileqq.tecent.com,采用反域名命名规则能够使其更易阅读,这样我们一看就是腾讯公司出的手机QQ产品。
  3. SaveLocation:存储地址,你的工程文件将被存于何处
  4. Language:AS提供了Java和Kotlin语言选项,本次学习选择Java语言,此外,up主天哥在奔跑也录制了kotlin语言的开发教程,大家也可以参考学习。
  5. Minimum SDK:你的应用所支持的最低版本SDK选择,也就意味着你的app在手机上运行时最低要求的安卓版本,目前选择Android 5.0(Lollipop)一般就可以满足需求了,AS也会提示我们可以适配94.1%的设备
  6. Use legacy android.support libraries:如果勾选,AS会认为你要使用旧的一些库,这会导致如果你在加载新的依赖时是可能出现问题的。发现这个坑已经有网友踩过了。在我们这个阶段尚构不成什么问题,但是之后可能会产生上述问题。我们从头学习新的技术的话,建议不要勾选这个选项。

    以上这些具体的内容设置完毕后,就可以点击Finish完成,新建工程阶段也就到此结束,AS会自动帮你打开你所创建的这个新的工程。

进入4这个大版本之后新建一个工程的步骤和原来稍有不同,但内容其实差不多,删去了一些设置比如不再要求你单独设置新建的这个activity的名称,其余的可以说是大同小异。

二.各种文件的基本介绍

打开工程文件后你将看到大量的文件夹,各种各样的文件,不过也不用太担心,他们已由AS帮你创建好。左上角Project点开,可以使用其他的整理方式来看到这些文件夹,不过Project这个选项为你将整个的文件结构都已经呈现得比较清晰,目前感觉对新手比较友好。

文件数量众多,我们会在学习到某个特定功能时,具体地了解用到的文件。

同时AS会自动帮你打开两个文件,他们就是刚才创建的Activity的最基本的组成文件。我们最开始也从这里起步。

文件的位置比较好找到,他们分别在下面的文件夹之中。

我们先介绍res文件夹,这是资源文件,其中的这些文件,我们在之后会经常用到。

  1. drawable:存放图片或自定义的xml文件(比如用于进阶地设置一些格式时候需要用到)

  2. layout:存放布局文件,比如决定这个activity布局的activity_main文件就存放在这里。

  3. mipmap:用于存放logo等图片文件,后缀的-hdpi等等是表示的分辨率。

  4. values:

    默认其中有三个xml文件,分别存放着决定颜色,字符串,主题的相关内容。可以把一些相关的内容规定在这里,然后在其他地方引用。比如可以在color文件中规定#000000是“black”,在布局文件中使用的时候可以更方便地直接引用而不需要每次都写16进值的形式。

  5. AndroidMainfest:比较重要的是,任何一个activity都必须在这个文件中声明注册,然后才能之后去使用。
    如果有多个activity这个文件中还会规定哪一个是最初初始化启动的activity。

最后介绍一下main文件中比较重要的build.gradle这个文件。
在介绍它之前简单提一下gradle,简单地讲gradle是一个帮你构建工程文件的工具,AS也是用gradle帮你建好的这个工程。
在这个文件中主要是定义一些版本号、依赖库之类的信息。

我在开始时遇到过这样的问题:我的activity_main.xml这个布局文件一直显示Loading…字样,发现是gradle在下载,还没有下载完成,下载完成之后恢复了正常。
gradle下载可能会很慢…就和jdk的时候是一样的这个csdn论坛上也给出了挺多解决方法。
这里贴一个坛友总结的方法,我用第一种方法成功解决了问题(但也只是相对快一点,碰上需要下载的时候就会很慢)gradle下载太慢的解决by洲汐

三:关于我们的第一个app

其实此时,AS已经帮你创建完了一个能够完整运营的最基本的app,我们先对其中的一些东西作简单了解。
我们将在MainActivity.java中看到如下代码。

package com.mokiki.helloworld;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

包括一些包名…引用库什么的
另外可以看到我们所创建的MainActivity这个类是继承自AppCompatActivity的,但是对于这个AppCompatActivity笔者尚不太明白,只能先照猫画虎,也许深入学习之后能够有所感悟,到时再来补充。

这里我们可以注意到一个@Override,这是一个注解,表示这是对它父类方法的重写。

onCreate()这个函数作用是在窗口置于前台前先加载一些窗口的属性,通常情况下,我们需要在onCreate()中调用setContentView(int)函数填充屏幕的UI,一般通过findViewById(int)返回xml中定义的视图或组件的ID,也可以像默认的这样,用R.layout.name的方式找到xml布局文件。

点一下这个name(要同时按住option和·这两个键才能点),你会发现能跳转到activity_main.xml,这就是这个activity的布局文件,也就是这个activity的UI就是根据这个文件来的。

下面我们看看
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

呼…又是好多代码,喘口气…

这里面主要有一个根布局ConstraintLayout,其中又有一个控件拿来显示文字,这个子控件内又有着很多的控制语句,用来控制显示效果。
ConstraintLayout这个是默认为你生成的根布局,你也可以不用这种布局方式,使用LinearLayout(线性布局)或者RelativeLayout(相对布局),后面这些控件、布局,我们会一个一个具体学习它们都有哪些属性~

最后简单说一下AndroidMainfest
目前我们需要知道的是这个

<activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

这段代码完成了我们一个activity的注册其实最简单的注册只需要

<activity android:name=".MainActivity"></activity>

就完成了,中间的内容,是把那个activity设成了初始启动的activity

之前说过,我们这个已经是一个“完成”的项目了,怎么看一下它的效果呢?AS提供了内置的模拟器帮助我们完成这个工作。在这里插入图片描述
在文件路径的右侧,整体窗口的右上角你可以找到这些工具,找到这个这个图标 ,点一下就可以启动AVD管理器。AVD管理器用于管理你所有的模拟器。

第一次使用前需要先来这里新建一个AVD
点击Create Virtual Device…

会看到为你提供的格式各样的虚拟机,选一个喜欢的之后Next

下一步选择这个虚拟机搭载的系统镜像版本,需要哪个直接download,下载完之后选中Next

最后可以给这个AVD起个名字便与识别,或者是改变一下其他的参数都可以,确定之后Finish,这个AVD就创建好了,再次打开AVD Manager就可以找到它进行一些设置。

在这个下拉框处,你也可以找到AVDManager,也可以启动虚拟机的运行,点那个绿色的箭头。

稍等片刻,当完成编译后,就会把你的app传到虚拟机上运行,你会看到一个这样的页面。

这就是你的第一个app:HelloWorld

我们回到刚才的activity_main.xml,把里面控件的text属性改成

 android:text="恭喜你完成HelloWorld并成功模拟运行!"

再运行就能看到新的页面

文字就变化了,之后我们再具体去学习这这些属性。

恭喜你,这就是你的第一个App:HelloWorld!

Hello Android World!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mokiki_/article/details/113746299

智能推荐

c语言中大括号怎么垂直下移,vs 中大括号之间垂直虚线显示-程序员宅基地

文章浏览阅读346次。51CTO博客开发在使用的时候,发现其两个问题setEnable并么有什么卵用关于onFling的设置,只滑动一张,在一个页面显示有多个海报,也是没有什么卵用对于FancyCoverFlow,虽然封装很好但都是基于gallery的,然onFling并卵。五、架构实践前边用了三篇文章,详细介绍了这个架构的各个部分的选择以及安装。这篇文章,我会用一个Demo项目,从开发到部署,包括MongoDB数据的..._c#大括号匹怎么自动向下

mac 系统使用brew安装nginx error_brew nginx err 256-程序员宅基地

文章浏览阅读653次。安装ruby on rails一直报Unable to download data from https://rubygems.org/的解决方案_brew nginx err 256

java 语音合成并生成wav文件_java 语音合成把txt文本内容转为wav格式-程序员宅基地

文章浏览阅读1.9k次。1.下载jacob文件,根据自己操作系统,将jacob-1.18-x64.dll文件复制到C:/windows/System32文件夹中下载链接: https://pan.baidu.com/s/1mimoaBeFhzVMsGOLzsvpBw 提取码: wsfz2.pom.xml引入依赖<!--文字转语音--><dependency> <..._java 语音合成把txt文本内容转为wav格式

__attribute__ directives in Objective-C_redundant call to 'printf()-程序员宅基地

文章浏览阅读802次。转自:https://blog.twitter.com/2014/attribute-directives-in-objective-cIn this post, we’ll examine what __attribute__ directives are and how they can be used in development. The goal is t_redundant call to 'printf()

js 小案例 跑马灯效果_js走马灯效果-程序员宅基地

文章浏览阅读2.1k次。俗话说:‘能用css解决的动画,绝不用js来实现’下面是利用 css中的 animation 实现跑马灯效果这个我采了坑 ,to {left:1500px},这里的距离是所有图片的宽度(不包含无缝复制的哈) 我一直设置的是container 一屏的宽度,一直不流畅。所以在此纪录下。<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <met.._js走马灯效果

ios swift string和charecters互转 int string 和 bytes [UInt8]互转_swift byte[]转string-程序员宅基地

文章浏览阅读345次。文章目录1.string和charecters互转2.int string to bytes [UInt8]1.string和charecters互转Strings and Characters - swift.org2.int string to bytes [UInt8] //str = "456" func intStringToBytes(str: String) -> [UInt8]{ var bytes: [UInt8] = [] _swift byte[]转string

随便推点

mysql 5.6建立数据库连接时出错_WordPress定期出现“建立数据库连接时出错”问题的解决方案...-程序员宅基地

文章浏览阅读202次。文章目录[隐藏]起因论证解决方案操作步骤先贴阿里云服务器的配置:这是一个困扰我很久的问题,之前不管是搭在CentOS还是Ubuntu上,Wordpress都会定期出现“建立数据库连接时错误”,最近一周更是每天早上网站都无法访问。通过 netstat -tunlp 发现是MySQL的进程被干掉了,service mysqld restart 还重启不了,简单粗暴点就直接reboot。不过每天早上起床..._mysql5.6 wordpress数据库连接

7-5 服务器统一出错处理2_rpcx recover 统一处理-程序员宅基地

文章浏览阅读294次。代码:https://github.com/NIGHTFIGHTING/go_learning/tree/master/src/errhandling/filelistingserver运行:go run web.go打开chrome:http://localhost:8888/li,此时server并没有挂掉原因:panic运行defer遇见recover修改版本1:..._rpcx recover 统一处理

solr学习(六):使用自定义int/long类型主键-程序员宅基地

文章浏览阅读2.7k次。需求分析:我不想使用solr默认的主键id,我想换成其他的,比如我的文章id为article_id,我想让article_id作为主键。而且,我的主键是int类型,而solr的主键默认是string类型,我们还需要修改,修改后,还会报错,我们还需要来解决报错问题。实践:第一步:我们需要打开C:\data\solr\collection1\conf\schema.xml然后我..._solr字段类型为intpointfieid,存储数据超过9位保存失败

Android Studio Bumblebee | 2021.1.1 Patch 2 修复BUG_org.gradle.api.gradlescriptexception: a problem oc-程序员宅基地

文章浏览阅读2.3w次,点赞3次,收藏4次。一般修复和功能此更新解决了以下问题:Android Gradle 插件 问题 #213534628:Android Gradle 插件 7.1.0-rc01 在单元测试期间无法执行 ASM 字节码转换 问题 #210484302:Android Studio 2021.1.1 beta5。Gradle 同步失败并显示“无法加载类 'com.android.build.api.extension.AndroidComponentsExtension'”。 问题 #19_org.gradle.api.gradlescriptexception: a problem occurred evaluating project

用python的赋值方法,交换两个数字(变量)的值_python从键盘输入两个整数,赋值个a和b两个变量。然后交换两个变量的值-程序员宅基地

文章浏览阅读1.7k次。用python的专有方法,交换两个数字(变量)的值两个整数变量 a = 100 ,b = 6,在不使用其他变量的情况下交换他们的值解法:1>>> a = 6>>> b = 100>>> a,b = (b,a)>>> print(a,b)100 62>>> a = 6>>&g..._python从键盘输入两个整数,赋值个a和b两个变量。然后交换两个变量的值

java咖啡机源代码_CoffeeMachine JAVA咖啡机,大学项目。实现投币、加水 糖等一系列模拟 自动运行的过程。有动 Develop 238万源代码下载- www.pudn.com...-程序员宅基地

文章浏览阅读305次。文件名称: CoffeeMachine下载 收藏√ [5 4 3 2 1]开发工具: Java文件大小: 1944 KB上传时间: 2014-11-27下载次数: 1详细说明:JAVA咖啡机,大学项目。实现投币、加水、加糖等一系列模拟咖啡机自动运行的过程。有动画有声音。-JAVA coffee maker, university projects. Realization coin..._2号咖啡机实验代码