Android开启旅程-分析第一个Android项目
项目结构:
project结构:
新建项目都会默认使用Android模式的项目结构。这是被Android studio转换过的,适用于快速开发。-
1..gradle和.idea
这两个目录都是放Android studio自生成的文件。无需关心,也不要手动编辑
2.app
代码、资源等开发工作几乎都是在这个目录下。
3.build
编译时自生成,无需关心。
4.gradle
这个目录包含了gradle wrapper的配置文件,使用grade wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否联网下载gradle。AS默认没有启动gradle wrapper的方式。如需打开:
File-->Settings-->Build-->Execution,Deployment-->gradle进行配置更改。
5..gitignore
这个文件是用来将指定的目录或文件排除在版本控制之外的。
6.build.gradle
项目全局的gradle构建脚本,通常不用修改,
7.gradle.properties
这是全局的gradle配置文件,在这里配置的属性将会影响到项目中的所有dradle编译脚本。
8.gradlew和gradlew.bat
这两个文件是用来命令行界面中执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,
gradlew.bat是在widows使用的。
9.HelloWord.iml
iml文件是所有Intellij IDEA项目都会自动生成的一个文件。用于标识这是一个Intellij IDEA项目,不需修改。(AS是基于Intellij IDEA开发的)
10.local.properties
这个文件用于指定SDK的路径,通常内容是自动生成的,我们并不需应该。
11.settings.gradle
这个文件用于指定项目所有引入的模块。由于Hello Word 项目只引入了一个app模块,该文件中只引入了一个模块。引入模块是自动完成的,一般不需要修改。
app目录解析:
1.build
这个目录与外界的build目录类似,包含一些编译时自动生成的文件,相对复杂一些,无需关心。
2.libs
放置第三方jar包,这个目录下的jar包会自动添加到构建路径中去。
3.AndroidTest
此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
4.java
放置Java代码的地方。
5.res
存放项目中使用的图片、布局、字符串等资源。
图片放在drawable目录下,布局放在layout目录下,字符串放在values目录下。
6.androidManifest.xml
整个项目的配置文件。组件注册、权限声明等。
7.text
此处是用来编写Unit Text测试用例的。对项目自动化测试的另一种方式。
8..gitignore
这个文件是将app模块内的指定目录或文件排除在版本控制之外,和外层的文件类似。
9.app.iml
IntelliJ IDEA项目自动生成的文件。我们不需关心或修改这个文件的内容。
10.build.gradle
这是app模块的构建脚本,这个文件会指定很多项目构建相关的配置。
11.proguard-rules.pro
这个文件指定项目代码的混淆规则,不希望被别人**。
AndroidManifest.xml文件:
<activity android:name=".hellowordActivity">
<intent-filter>
<activity android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<intent-filter>
<Activity>
这段代码是对HelloWordActivity这个活动的注册,没有注册的活动是不能使用的。
intent-filter与category表示是项目的主活动。
HelloWordActivity活动:
HelloWordActivity是继承自AppCompatActivity的,这是一种向下兼容的Activity。最低兼容到Android2.1。
Activity是Android系统提供的一个活动基类,项目中所有的活动必须继承它或他的子类才能拥有活动的特性。
AppCompatActivity是Activity是Activity的子类。
setContentView()方法:给当前活动引入一个布局。
详解项目中的资源
app-->res目录:
以drawable开头的用来放置图片、
以mipmap开头的用来放置应用图标、
以values开头的用来放置字符串 样式 颜色等配置、
layout文件夹用来放置布局文件。
drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等文件夹放置不同分辨率的版本,系统会根据设备版本选择加载。
<resources>
<string name="app_name">helloword</string>
</resources>
在代码中通过R.string.app_name可以获得该字符串的引用。
在XML中通过@string/app_name可以获得该字符串的引用。
其中string可以替换为drawanle、mipmap、layout。
AndroidManifest.xml文件
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
...>
</application>
应用图标Android:icon指定;应用名称Android:label指定。
详解build.gradle
Android studio 是用gradle来构建项目的。Gradle是一个非常先进的项目构建工具。它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置。摒弃了传统基于XML(如Ant和Maven)的各项繁琐配置。
外层build.gradle文件:
buildscript{
repositories{
jcenter()
}
dependencies{
classpath'com.android.tools.build:gradle:2.2.0'
}
}
allprojects{
reposittories{
jcenter()
}
}
这些代码都是自动生成的,语法结构上看上去有些难以理解 我们只看关键部分。
两处repositories闭包都声明了jcenter()这行配置,它是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter。生命了这行配置,我们就可以在项目中引用任何jcenter上的开源项目了。
dependencies闭关包中使用classpath声明;了一个gradle插件。gradle并不是专门为Android项目而开发的Java、c++等很多项目都可以使用gradle来构建。因此我们想要使用它来构建项目的话,则需要声明com.android.tools.build.gradle:2.2.2这个插件。最后面部分是插件的版本号。
通常情况下不需要修改这个文件的内容,除非你想添加一些全局项目的构建配置
app目录下的build.gradle文件:
apply plugin:'com.android.application'
android{
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig{
applicationId "com.example.helloworld"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes{
release{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
}
dependencies{
compile fileTree(dir:'libs',include:['*.jar'])
compile 'com.android .support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
}
第一行代码应用了一个插件,一般有两种至可选:
com.android.application表示这是一个应用程序模块;com.android.library表示一个库模块。
区别于一个是直接运行的,一个只能作为代码库依附在别的应用程序模块来运行。
第二个是一个大的Android闭包。这个闭包中我们可以配置项目构建的各种属性。
compileSdkVersion用于指定项目编译版本,24表示Android7.0系统的SDK编译。
buildToolsVersion用于指定项目构建工具的版本。
defaultConfig可对项目更多细节的配置:
applicationId制定项目的包名;minSdkVersion用于指定项目最低兼容的Android系统版本;
targetSdkVersion指定的值表示在该版本上做过充分的测试,系统会为你的应用程序启动一些最新的功能和特性
versionCode 指定项目的版本号;versionName:指定项目的版本名。
buildTypes 闭包:用于指定生成安装文件的相关配置:通常只有两个闭包。一个是debug,一个是release.
debug用于指定生成测试版安装文件的相关配置,release用于指定生成正式版安装文件的相关配置。debug可忽略不写。
dependencies闭包:指定当前项目所有的依赖关系。
Android studio项目的三种依赖关系:本地依赖、库依赖、远程依赖。