• 【安卓基础1】初识Android


    🏆作者简介:|康有为| ,大四在读,目前在小米安卓实习,毕业入职

    🏆本文收录于  安卓学习大全,欢迎关注

    🏆安卓学习资料推荐:

            视频:b站搜动脑学院 视频链接 (他们的视频后面一部分没再更新,看看前面也挺好的)

            书籍:《第一行代码》(第3版) by 郭霖 (z-lib.org)

            思维导图: https://www.processon.com/view/link/62427cb2e0b34d0730e20e00(来自动脑学院)

    目录

    一、创建HelloWorld程序

    二、分析HelloWorld程序

    目录分析

    HelloWorld程序怎么启动的?

    1.看配置文件AndroidManifest.xml

    2.看MainActivity

    3.看activity_main.xml

    三、详解项目中的资源

    如何使用资源

    四、详解Gradle

    Gradle介绍

    自动化构建工具有哪些?

    build.gradle

    五、日志

    六、AndroidStudio 操作


    一、创建HelloWorld程序

    前提:下载好了AndroidStudio(我用的是刺猬版)

    直接 new project,选择Empty Views Activity (很多教程说的是创建Empty Activity, 老版本AndroidStudio的Empty Activity = 新版本AndroidStudio的 Empty Views Activity,所以这里选择 Empty Views Activity)

    语言选择java

    点击Finish,等待一会

    这里切换成Project

    点击启动按钮,就能在虚拟手机上看到HelloWorld了(虚拟机配置一下,好像新版本是自带了一个虚拟机,直接就能用)

    二、分析HelloWorld程序

    目录分析

    将项目结构模式切换成Project,这就是项目真实的目录结构了。

    除了app目录之外,大多数的文件和目 录是自动生成的,我们并不需要进行修改。app目录下的内容才是我们以后 的工作重点

    HelloWorld程序怎么启动的?

    1.看配置文件AndroidManifest.xml

    首先打开AndroidManifest.xml文件,从中可以找到如下代码:

    这段代码表示对MainActivity进行注册,没有在AndroidManifest.xml里注册的Activity是不 能使用的。

    其中intent-filter里的两行代码非常重要, 它们 表示MainActivity是这个 项目的Activity,在手机上点击应用图标,首先启动的就是这个Activity。

    那MainActivity具体又有什么作用呢?Android四大组件,Activity是 Android应用程序的门面,凡是在应用中你看得到的东西,都是放在Activity中的。

    2.MainActivity

    打开MainActivity文件,如下图

    首先可以看到,MainActivity是继承自AppCompatActivity的。AppCompatActivity是 AndroidX中提供的一种向下兼容的Activity,可以使Activity在不同系统版本中的功能保持一 致性。而Activity类是Android系统提供的一个基类,我们项目中所有自定义的Activity都必须 继承它或者它的子类才能拥有Activity的特性(AppCompatActivity是Activity的子类)。

    然后可以看到MainActivity中有一个onCreate()方法,这个方法是一个Activity被创建时必定要 执行的方法,其中只有两行代码,并且没有“Hello World! ”的字样。那么程序显示 的“Hello World! ”是在哪里定义的呢?

    3.activity_main.xml

    布局文件都是定义在res/layout目录下的,当你展开layout目录,你会看到 activity_main.xml这个文件。打开该文件并切换到Text视图。

    点击下图按钮切换Test视图

    看到上面代码中有一个 TextView,这是Android系统提供的一个控件,用于在布局中显示文字。

    终于 看到了 “HelloWorld”字样!

    三、详解项目中的资源

    如果你展开res目录看一下

    所有 以“drawable”开头的目录都是用来放图片

    所有 以“mipmap”开头的目录都是用来放应用图标

    所有 以“values”开头的目录都是用来放字符串、样式、颜色等配置的

    所有 以“layout”开头的目录都是用来放布局文件的。

    之所以有这么多“mipmap”开头的目录,其实主要是为了让程序能够更好地兼容各种设备。 drawable目录也是相同的道理,虽然Android Studio没有帮我们自动生成,但是我们应该自 己创建drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等目录。在制作程序的时候, 最好能够给同一张图片提供几个不同分辨率的版本,分别放在这些目录下,然后程序运行的时 候,会自动根据当前运行设备分辨率的高低选择加载哪个目录下的图片。当然这只是理想情 况,更多的时候美工只会提供给我们一份图片,这时你把所有图片都放在drawable-xxhdpi目 录下就好了,因为这是最主流的设备分辨率目录。

    如何使用资源

    知道了res目录下每个子目录的含义,我们再来看一下如何使用这些资源吧。

    打开 res/values/strings.xml文件,内容如下所示:

    1. <resources>
    2.     <string name="app_name">HelloWorld-Javastring>
    3. resources>

    可以看到,这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它。

     在代码中通过R.string.app_name可以获得该字符串的引用。

     在XML中通过@string/app_name可以获得该字符串的引用。

    基本的语法就是上面这两种方式,其中string部分是可以替换的,如果是引用的图片资源就可 以替换成drawable,如果是引用的应用图标就可以替换成mipmap,如果是引用的布局文件就 可以替换成layout,以此类推。

    下面举一个简单的例子来帮助你理解,打开AndroidManifest.xml文件,找到如下代码:

    1.     android:allowBackup="true"
    2.     android:dataExtractionRules="@xml/data_extraction_rules"
    3.     android:fullBackupContent="@xml/backup_rules"
    4.     android:icon="@mipmap/ic_launcher"
    5.     android:label="@string/app_name"
    6.     android:roundIcon="@mipmap/ic_launcher_round"
    7.     android:supportsRtl="true"
    8.     android:theme="@style/Theme.HelloWorldJava"

    其中,HelloWorld项目的应用图标就是通过android:icon属性指定的,应用的名称则是通过 android:label属性指定的。可以看到,这里对资源引用的方式正是我们刚刚学过的在XML中 引用资源的语法。

    四、详解Gradle

    Gradle介绍

    gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具

    所谓的构建过程就是:编译,测试,依赖管理,打包,部署。以前我们开发是手动导入jar包的,类似于面向过程,一步一步来,缺什么包就导什么包,很麻烦,容易出错,jar包版本还不统一,需要关心jar包与jar包之间的依赖。通过采用gradle的构建方式,只需通过complie xxxxx引入一个jar包,然后这个jar包所依赖的其他jar包gradle会自动帮引入,无需关心jar包与jar包之间的依赖,在什么地方以什么形式引入外部jar包,都委托给gradle管理了,体现了面象对象的思想,无需关心内部实现过程,直接引入就可。(注意Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能)

    Android studio的默认插件是Gradle,或许是因为Gradle编译速度比Maven 快很多,而且Gradle完全兼容kotlin语言。当我们新建一个android 项目,gradle已经默认配置好了。

    打开gradle-wrapper.properties文件,查看配置信息:可以看到distributionUrl=https://services.gradle.org/distributions/gradle-5.1.1-all.zip说明默认使用的是gradle 5.1.1 的版本,当然可以改成我们本地有的版本,distributionUrl=file:///+gradle的本地路径,例如:distributionUrl=file:///c:/tools/gradle-5.6.4.zip就可以了。 android gradle插件详解地址:https://developer.android.com/studio/releases/gradle-plugin?hl=zh-cn

    自动化构建工具有哪些?

    Ant 2000年诞生,主要是编译代码,测试代码。

    Maven 2007年诞生,主要是编译测试,依赖管理。

    Gradle 2012年诞生 主要是是编译测试,依赖管理,DSL自定义扩展任务。

    build.gradle

    build.gradle文件分别在项目目录下和对应module目录都有存在。

    下图是项目目录下的build.gradle:

    接下来是module目录的build.gradle:

    module目录下的的build.gradle里的dependencies {…}里面的依赖,是单单一个模块本身所需的依赖!是程序运行的编译依赖。

    在External Libraries文件夹下,如图

    可以看到项目添加的所有依赖,包括子依赖都会显示在里面。除build.gradle里的dependencies {…}里面添加的依赖之外的依赖都是子依赖。

    子依赖都是gradle智能自动的帮你添加的,它检查到你主动添加的依赖,又依赖于其他依赖,就会帮你加上。另外当gradle检查到依赖间有冲突时,出现依赖间多次引用相同jar包(只能将库里的源码打进去,而资源什么的不能打进去)、aar包(自动的将资源文件和源码一起打进去,不用担心资源缺失的问题),它只会默认选择版本较高的添加,不会重复添加。这就是gradle出色的依赖管理。

    切换成显示代码

    五、日志

    Android的日志工具Log

    打开MainActivity,在onCreate()方法中添加一行打印日志的语句,如下所示:

    1. public class MainActivity extends AppCompatActivity {
    2.     @Override
    3.     protected void onCreate(Bundle savedInstanceState) {
    4.         super.onCreate(savedInstanceState);
    5.         setContentView(R.layout.activity_main);
    6.         //日志
    7.         Log.d("MainActivity", "onCreate execute");
    8.     }
    9. }

    Log.d()方法中传入了两个参数:

    第一个参数是tag,一般传入当前的类名就好,主要用于对 打印信息进行过滤;

    第二个参数是msg,即想要打印的具体内容。

    重新启动后看到日志输出

    Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我 们打印日志。

    • Log.v()。用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是 Android日志里面级别最低的一种。
    • Log.d()。用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。 对应级别debug,比verbose高一级。
    • Log.i()。用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分 析用户行为的数据。对应级别info,比debug高一级。
    • Log.w()。用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修 复一下这些出现警告的地方。对应级别warn,比info高一级。
    • Log.e()。用于打印程序中的错误信息,比如程序进入了catch语句中。当有错误信息打 印出来的时候,一般代表你的程序出现严重问题了,必须尽快修复。对应级别error,比 warn高一级。

    为什么用Log不用println()

    在真正的项目开发中, 是极度不建议使用System.out.println()或println()方法的,如果你在公司的项目中经 常使用这两个方法来打印日志的话,就很有可能要挨骂了。

    为什么System.out.println()和println()方法会这么不受待见呢?经过我仔细分析之 后,发现这两个方法除了使用方便一点之外,其他就一无是处了。方便在哪儿呢?在Android Studio中你只需要输入“sout”,然后按下代码提示键,方法就会自动出来了,相信这也是很多 Java新手对它钟情的原因。那缺点又在哪儿了呢?这个就太多了,比如日志开关不可控制、不能添加日志标签、日志没有级别区分……

    Logcat中的过滤器

    目前只有3个过滤器,Show only selected application表示只显示当前选中程序的日志; Firebase是Google提供的一个开发者工具和基础架构平台,我们可以不用管它;No Filters相当于没有过滤器,会把所有的日志都显示出来。那可不可以自定义过滤器呢?当然可以,我们 现在就来添加一个过滤器试试。

    新版本筛选方式:

    新版Android Studio Logcat 筛选日志

    六、AndroidStudio 操作

    创建模块

  • 相关阅读:
    一步步带你剖析Java中的Reader类
    mac电脑监控软件哪个好
    Yii2使用composer安装MongoDB扩展
    数据结构与算法-栈
    C++统一初始化和初始化列表
    哈希表题目:两数之和
    Vue指令v-show和v-if的区别
    因为 QUERY_ALL_PACKAGES 权限,我们上不了 Google Play 了
    公共关系学试题及答案
    #ubuntu# #git# repository git config --global --add safe.directory
  • 原文地址:https://blog.csdn.net/KangYouWei6/article/details/136191757