广饶县住房和城乡建设局网站,韩国今天新闻,大连line公司,网站推广的作用#x1f3c6;作者简介#xff1a;|康有为| #xff0c;大四在读#xff0c;目前在小米安卓实习#xff0c;毕业入职。 #x1f3c6;安卓学习资料推荐#xff1a; 视频#xff1a;b站搜动脑学院 视频链接 #xff08;他们的视频后面一部分没再更新#xff0c;看看前面… 作者简介|康有为| 大四在读目前在小米安卓实习毕业入职。 安卓学习资料推荐 视频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文件内容如下所示
resourcesstring nameapp_nameHelloWorld-Java/string
/resources
可以看到这里定义了一个应用程序名的字符串我们有以下两种方式来引用它。 在代码中通过R.string.app_name可以获得该字符串的引用。 在XML中通过string/app_name可以获得该字符串的引用。
基本的语法就是上面这两种方式其中string部分是可以替换的如果是引用的图片资源就可 以替换成drawable如果是引用的应用图标就可以替换成mipmap如果是引用的布局文件就 可以替换成layout以此类推。 下面举一个简单的例子来帮助你理解打开AndroidManifest.xml文件找到如下代码 android:allowBackuptrueandroid:dataExtractionRulesxml/data_extraction_rulesandroid:fullBackupContentxml/backup_rulesandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:roundIconmipmap/ic_launcher_roundandroid:supportsRtltrueandroid:themestyle/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文件查看配置信息可以看到distributionUrlhttps://services.gradle.org/distributions/gradle-5.1.1-all.zip说明默认使用的是gradle 5.1.1 的版本当然可以改成我们本地有的版本distributionUrlfile:///gradle的本地路径例如distributionUrlfile:///c:/tools/gradle-5.6.4.zip就可以了。 android gradle插件详解地址https://developer.android.com/studio/releases/gradle-plugin?hlzh-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()方法中添加一行打印日志的语句如下所示
public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//日志Log.d(MainActivity, onCreate execute);}
}
Log.d()方法中传入了两个参数
第一个参数是tag一般传入当前的类名就好主要用于对 打印信息进行过滤
第二个参数是msg即想要打印的具体内容。 重新启动后看到日志输出 Android中的日志工具类是Logandroid.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 操作
创建模块