第一行代码Android(第二版)——第一章笔记
参考书籍:第一行代码:Android(第二版)(郭霖)
一、第一个安卓程序
1、Android Studio项目结构分析
1、.gradle和.idea | 这两个目录放置的都是Android Studio自动生成的一些文件,无需关心,也不要去编辑和修改 |
---|---|
2、app | 项目中的代码,资源等内容几乎都是放置在这个目录下面,我们的开发工作也基本都是在这个目录下进行的 |
3、bulid | 这个目录主要包含了一些编译时自动生成的文件,也无需过多关心 |
4、gradle | 这个目录下包含了gradle wrapper的配置文件使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle。Android Studio默认没有启动gradle wrapper的方式如果需要打开,可以点击Android Studio导航栏——File——Settings——Bulid,Execution,Deployment——Gradle,进行配置更改 |
5、.gitignore | 这个文件是用来将指定的目录或文件排除在版本控制之外 |
6、build.gradle | 这是项目的全局的gradle构建脚本,通常这个文件中的内容是不需要修改的 |
7、gradle.properties | 这个文件是全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本 |
8、gradlew和gradlew.bat | 这两个文件是用来在命令行界面中执行gradle命令,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的 |
9、local.properties | 这个文件用于指定本机中的Android SDK路径,通常内容都是自动生成的,我们不需要修改。除非本机中的Android SDK位置发生了变化,那么将此文件中的路径改为新的路径即可 |
10、settings.gradle | 这个文件用于指定项目中的所有引入模块。由于HelloWorld项目中就只有一个APP模块,因此该文件中也就只引入app这一个模块,通常情况下模块的引入都是自动完成的。 |
2、重点app目录结构
1、build | 这个目录和外层的build目录类似主要也是包含了一些在编译时自动生成的文件,这个里面的内容会更加复杂,但是不需要过多的关心 |
---|---|
2、libs | 如果项目使用了第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包都不自动添加到构建路劲里去 |
3、androidTest | 此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试 |
4、java | 这个目录是放置我们所有的Java代码的地方,展开目录,可以看到HelloWorldActivity文件就在里面 |
5、res | 这个目录下的内容存放了项目所需要使用的所有图片、布局、字符串、等资源都要存放在这个目录下。这个目录有许多的子目录,图片存放在drawable目录下,布局存放在layout目录下,字符串存放在values目录下 |
6、AndroidManifest,xml | 这是整个Android项目配置文件在程序中定义的所有四大组件都需要在这个文件里面注册,另外还可以在这个文件中给应用程序添加权限声明,这个文件以后会经常用到 |
7、test | 此处用来编写Unit Test测试用例的,对项目进行自动化测试的另一种方式 |
8、.gitignore | 这个文件用于将app模块内的指定的目录或文件排除 在版本控制之外,作用和外层的.gitignore文件类似 |
9、build.gradle | 这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置 |
10、proguard-rules.pro | 这个文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破译者难以阅读 |
3、AndroidManifest,xml部分代码分析
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这段代码表示对MainActivity这个活动进行注册,如果没有在AndroidManifest.xml里注册的活动是不能使用的。
其中intent-filter里面的两行代码非常重要,
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
表示MainActivity是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动
4、MainActivity.java代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
/*
首先MainActivity是继承于AppCompatActivity的这是一种向下兼容的Activity可以将Activity在各个系统版本中增加的特性和功能最低兼容到Android2.1系统。Activity是Android系统提供的一个活动基类,项目中的所有的活动都必须继承它的子类才能拥有活动的特性(AppCompatActivity是Activity的子类)。然后MainActivity中有一个onCreate()方法,这个方法是一个活动被创建时必定要执行的方法,在安卓程序设计讲究逻辑和识视图分离,因此不推荐在活动中直接编写界面,而是在布局文件中编写界面,然后在活动中引入进来,setContentView()方法,就是引入布局的方法,给当前活动引入了一个activity_main布局,那就是编写Helloworld的布局文件。布局的文件定义在res/layout目录下面,展开
layout文件就可以看到一个activity_main.xml这个文件
*/
5、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>
<!--
TextView这是安卓系统提供的一个控件,用于在布局中显示文字:android:text="Hello World!"
-->
6、重点目录app/src/main/res目录
1、所有以drawable开头的文件夹 | 都是用来放照片的 |
---|---|
2、所有以mipmap开头的文件夹 | 都是用来放对应图标的 |
3、所有以values开头的文件夹 | 都是用来放字符串、样式、颜色等配置的 |
4、layout文件夹 | 是用来放布局文件的 |
之所以有那么多的mipmap开头的文件夹,主要是为了让程序能够更好的兼容各种设备,drawable文件夹也是同样的道理,如果Android Studio没有帮我们生成drawable-hdpi、drawable-xhdpi、drawable-xxhdpi、drawable-mhdpi等文件时,我们应该自己创建,表示一张照片在不同分辨率情况,一般美工只提一个分辨率时我们只需将图片放置在drawable-xxhdpi文件夹下面即可
1、res/values/string.xml文件
<resources>
<string name="app_name">Helloworld</string>
</resources>
<!--
引用方式:
方式一:
代码中通过R.string.app_name可以获得该字符串的引用
方式二:
在xml中通过@string/app_name可以获得该字符串的引用
其中string部分可以替换,如果是引用的图片资源就可以替换成drawable,如果是引用的应用图标就可以替换成mipmap,如果是引用布局文件就可以替换成layout,以此类推
-->
例子
<!--
打开AndroidManifest.xml文件,如下代码:
android:icon属性定义项目应用的图标
android:label属性应用的名称
-->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Helloworld">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
二、安卓的日志工具Log
1、介绍
Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志
1、Log.v() | 用于打印那些最为琐碎的、意义最小的日志信息。对应用级别verbose,是Android日志级别最低的一种 |
---|---|
2、Log.d() | 用于打印一些调试信息,这些信息对调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级 |
3、Log.i() | 用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户行为数据。对应级别info,比debug高一级 |
4、Log.w() | 用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好修复一下这些出现警告的地方。对应级别warn,比info高一级 |
5、Log.e() | 用于打印程序中的错误信息,比如程序进入到了catch语句当中。当有错误信息打印出来的时候,一般代表程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级 |
2、例子:
打开MainActivity.java文件
包名自行补充
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
/*
* 在onCreate()方法中添加一行打印日志的语句
* Log.d()方法中传入两个参数:第一个tag,一般传入当前的类名就好,主要用于对打印信息进行过滤;
* 第二个参数msg,即想要打印的具体内容
* 然后重新运行一下这个项目,点击顶部工具栏的运行按钮,或者使用快捷键shift f10,(mac系统是ctrl r)
* 等运行完毕在底部的工具栏的Android Monitor,在logcat中就可以看到打印信息了
* */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity","想要打印的内容");
}
}
运行结果:
这里不仅可以看到打印的日志的内容和tag名,就连程序的包名、打印时间以及应用程序的进程号都可以看到
3、快捷输入日志语句
1、Log.v() | logv Tab键 |
---|---|
2、Log.d() | logd Tab键 |
3、Log.i() | logi Tab键 |
4、Log.w() | logw Tab键 |
5、Log.e() | loge Tab键 |
6、在onCreate()方法外面输入logt Tab键 | 自动产生一个TAG常量 |
4、logcat中的过滤器
1、show only selected application 表示只显示当前选中程序的日志
2、Firebase 是谷歌提供的一个分析工具,可以不管
3、No Filters 相当于没有过滤器,会把所有的日志都显示出来
4、Edit Filters Configuration 自定义过滤器
自定义data过滤器,然后选择这个过滤器时,之前打印的日志信息就会被过滤掉,这个过滤器只显示TAG为data的日志信息
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfifbcj
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13