app
的目录结构- 一些零碎的知识
- 详解
build.gradle
文件Android
的日志工具- 过滤器的使用
4. app的目录结构
1.build
这个目录和外层的
build
目录类似,主要也是包含了一些在编译时自动生成的文件,不过他里面的内容更多更杂。2.libs
如果你的项目中使用到了第三方的
jar
包,就需要把这些jar
包都放在libs
文件夹下面,放在这个目录下的jar
包都会自动添加到构建路径里去。3.androidTest
此处是用来编写
AndroidTest
测试用例的,可以对项目进行一些自动化测试。4.java
java
目录是放置我们所有Java
代码的地方。5.res
你在项目中使用到的所有图片,布局,字符串等资源都要放在这个目录下,当然这个目录下还有很多的子目录,图片放到
drawable
目录下,布局放到layout
目录下,字符串放到values
目录下。6.AndroidManifest.xml
这是你整个
Android
项目的配置文件,你在程序中定义的四大组件都需要在这个文件中注册。另外还可以在这个文件中给应用程序添加权限声明。7.test
此处是用来编写
Unit Test
测试用例的,是对项目进行自动化测试的另一种方式。8. .gitignore
这个文件用于将
app
模块内的指定的目录或文件排除在版本控制之外,作用和外层的.gitignore
文件类似。9.app.iml
IntelliJ IDEA
项目自动生成的文件,我们不需要关心和修改这个文件里面的内容。10.build.gradle
这是
app
模块的gradle
构建脚本,这个文件中会指定很多项目构建相关的配置。11.proguard-rules.pro
这个文件用于指定项目代码的混淆规则。
一些零碎的知识点:
1.
public class MainActivity extends AppCompatActivity
{
''''
}
MainActivity
是继承自AppConpatActivity
的,这是一种向下兼容的Activity
,可以将Activity
在各个系统版本中增加的特性和功能最低兼容到Android2.1
系统。Activity
是Android
系统提供的一个活动基类,我们项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性(AppCompatActivity
是Activity
的子类)。
2.
所有以drawable
开头的文件夹都是用来放图片的,所有以mipmap
开头的文件夹都是用来放应用图标的,所有以values
开头的文件夹都是用来放字符串,样式,颜色等配置的,layout
文件夹是用来放布局文件的。
3.
引用属性的两种方式。
1.在代码中通过R.string.hello_world
可以获得该字符串的引用。
2.在XML
中通过@string/hello_world
可以获得该字符串的引用。
4.
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
项目的应用图标就是通过android:icon
属性来指定的。
应用的名称则是通过android:label
属性指定的。
5.详解build.gradle文件
1.外部的build.gradle文件
buildscript
{
repositories
{
jcenter()
}
dependencies
{
classpath 'com.android.tools.build:gradle:2.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects
{
repositories
{
jcenter()
}
}
两处repositories
的闭包中都声明了jcenter()
这行配置,其实他是一个代码托管仓库,很多Android
开源项目都会选择将代码托管到jcenter
上,声明了这行配置之后,我们就可以在项目中轻松引用任何jcenter
上的开源项目了。 dependencies
闭包中使用classpath
声明了一个Gradle
插件,我们用它来构建Android
项目,后面是版本号。通常情况下你并不需要修改这个文件中的内容,除非你想添加一些全局的项目构建配置。
2.app目录下的build.gradle文件
apply plugin: 'com.android.application'
android
{
compileSdkVersion 23
buildToolsVersion "25.0.2"
defaultConfig
{
applicationId "com.example.myapplication"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes
{
release
{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies
{
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
}
apply plugin: 'com.android.application
应用了一个插件,一般有两种值可选:com.android.application
表示这是一个应用程序模块,com.android.library
表示这是一个库模块。应用程序模块和库模块的最大区别在于,一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。
接下来是一个大的Android闭包,在这个闭包中我们可以配置项目构建的各种属性,其中compileSdkVersion
用于指定项目的编译版本,24表示使用Android7.0系统的SDK编译,buildToolsVersion
用于指定项目构建工具的版本,目前的版本是25.0.2。
里面嵌套的的defaultConfig闭包
, applicationId
用于指定项目的包名,我们在创建项目的时候已经指定过包名,如果你想在后面对其进行修改,那么就是在这里修改的, minSdkVersion
用于指定项目最低兼容的Android
系统版本,15
代表兼容到Android4.0
系统,targetSdkVersion
指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性,如果你将targetSdkVersion
指定成23
或者更高的话,系统就会为你的程序启用运行时权限功能,如果设置成22
,22
代表Android5.1
系统,运行时权限就不会自然就不会启用。versionCode
用于指定项目的版本号,versionName
用于指定项目的版本名。这两个属性在生成安装文件的时候非常重要。
buildTypes闭包用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug,一个是release。debug闭包用于指定生成测试版安装文件的配置,release闭包用于指定生成正式版安装文件的配置,debug闭包是可以忽略不写的。
release闭包
minifyEnabled
用于指定是否对项目的代码进行混淆,true
表示混淆,false
表示不混淆。proguardFiles
用于指定混淆时使用的规则文件,这里指定了两个文件,第一个proguard-android.txt
是在AndroidSDK目录下的,里面是所有项目通用的混淆规则,第二个proguard-rules.pro
是在当前项目的根目录下的,里面可以编写当前项目特有的混淆规则.需要注意的是,通过Android Studio
直接运行项目,生成的都是测试版安装文件。
dependencies闭包
这个闭包的功能非常强大,它可以指定当前项目所有的依赖关系,通常Android Studio
项目一共有三种依赖方式:本地依赖,库依赖和远程依赖。本地依赖可以对本地的jar
包或目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖则可以对jcenter
库上的开源项目添加依赖关系,观察一下dependencies
闭包中的配置:
compile fileTree
就是一个本地依赖声明,他表示将libs
目录下所有.jar
后缀的文件都添加到项目的构建路径当中。
implementation 'com.android.support:appcompat-v7:23.4.0'
是远程依赖声明,其中com.android.support
是域名部分,用于和其他公司的库作区分,appcompat-v7
是组名称,用于和同一个公司中不同的库作区分,24.2.1
是版本号,用于和同一个库不同的版本做区分。加上这句声明后,Gradle
在构建项目时会首先检查一下本地是否已经有这个库的缓存,如果没有的话则会去自动联网下载,然后再添加到项目的构建路径当中。
6.Android的日志工具
log.d("MainActivity","onCreate: ");
Log.d()
方法中传入了两个参数:第一个参数是tag
,一般传入当前的类名就好,主要用于对打印的信息进行过滤。第二个参数是msg
,即想要打印的具体的内容。
Shift+F10
: 运行程序。
打印一条debug
级别的日志,只需要输入logd
,然后按下Tab
键,就会帮你自动补全一条完整的打印语句。
我们在onCreate()
方法的外面输入logt
,然后按下Tab
键,这时就会以当前的类名作为值自动生成一个TAG常量。
7.过滤器的使用
目前只有3个过滤器:
Show only selected application:
表示只显示当前选中程序的日志。
No Filters:
没有过滤器,会把所有的信息显示出来。
Edit Filter Configuration:
自定义过滤器,给过滤器起名叫data
,并且让他对名为data
的tag
进行过滤。