3.2、Android Studio 创建Android项目

文章摘要
1、创建一个新的Android Studio项目
2、查看生成的Gradle文件列表
3、查看顶级Gradle构建文件
4、查看应用程序模块中的构建文件
5、运行标准的Gradle任务
6、使用Gradle窗口
7、运行构建扫描
8、Gradle Jcenter下载库地址


英文文献

一、创建一个新的Android Studio项目

下载并安装Android Studio后,启动应用程序。
在欢迎屏幕上,单击标题为“启动新的Android Studio项目”的链接,如图所示。

准备好后,单击下载并安装Android Studio后,启动应用程序。
在欢迎屏幕上,单击标题为“启动新的Android Studio项目”的链接,如图所示。
准备好后,单击下一步

欢迎使用Android Studio

在“创建Android项目”屏幕上,将应用程序名称设置为“HelloWorldGradle”,将公司域设置为您自己的(在附图中使用了
gradle.org),并为项目位置选择任何方便的目录。
然后单击下一步

创建新项目

在“目标Android设备”屏幕上,选择手机和平板电脑,并从最低SDK下拉列表中选择任何最近的API级别。
该图显示了API 19,这是常见的,但所选择的值不会影响本指南的其余部分。

指定Android装置

在“添加Activity”屏幕上,选择“ Empty Activity”,然后单击“ 下一步 ”。
接受“配置活动”屏幕上的所有默认值,然后单击
完成* 。

配置Activity

二、查看生成的Gradle文件列表

默认情况下,Android Studio将以“Android”模式启动“项目视图”,如图所示:

Project View Android

Android项目是Gradle多项目构建,具有顶级build.gradle文件和调用的子目录app以及其自己的build.gradle文件。
顶层构建文件(Project: HelloWorldGradle)
如图所示,app构建文件已(Module: app)附加到该文件。

可能会有两个文件gradle.properties。一个是项目加载。另一个文件可选,只有当您的主目录gradle.properties的.gradle子目录中有全局文件时,才会存在。

该文件settings.gradle由Gradle用于配置多项目构建。它应该由一行组成:

include ':app'

这告诉Gradle app子目录也是一个Gradle项目。
如果在稍后,您将通过向导向该项目添加一个Android库,将创建另一个项目子目录并将其添加到此文件。

最后一个文件被调用gradle-wrapper.properties,它配置了所谓的Gradle Wrapper。这样就可以编译Android项目,而无需首先安装Gradle。

该文件的内容应类似于:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip

前四行表示当包装器第一次运行时,它将下载Gradle分发并将其存储在主目录.gradle/wrapper/dists中的目录中。最后一行显示的是distributionUrl,它是Gradle将下载指定分布的位置。

具体版本号可能与此处显示的不同(3.4.1),URL可能指的是二进制版本(-bin),而不是-all本示例中显示
的complete()版本。

三、查看顶级Gradle构建文件

项目build.gradle文件的内容应该类似于:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {                 
    repositories {
        jcenter()
    }
    dependencies {            
        classpath 'com.android.tools.build:gradle:2.4.0-alpha7'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {                 
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {    
    delete rootProject.buildDir
}
  • 1、下载插件块:repositories
  • 2、标识Android插件:dependencies
  • 3、顶级和模块项目的配置:allprojects
  • 4、特设任务:task clean

Gradle定义了用于构建的域特定语言(DSL),用于构建文件中。
该buildscript标签是该DSL的一部分。
它告诉Gradle,构建需要一个可能不是基线Gradle分布的插件,并告诉Gradle在哪里找到它。
在这种情况下,所需的插件是使用坐标语法“group:name:version”指定的,其中组是com.android.tools.build 名称 gradle,版本是 2.4.0-alpha7。

Gradle插件的版本号经常更新。
请使用最新的插件,因为它将包含所有可用的错误修复和性能改进。

当Gradle首次构建该项目时,该插件将被下载并缓存,因此此任务仅执行一次。
该allprojects
标签保存适用于顶级项目及其包含的任何子项目的配置详细信息。
在这种情况下,该块指定从jcenter公共Bintray Artifactory存储库
https://jcenter.bintray.com下载任何所需的依赖关系。

最后,构建文件包含一个调用的自定义(或临时)任务clean。
它使用内置的任务类型Delete,并对其进行配置,该clean任务将删除
buildDir的rootProject。两者都是项目属性,其值默认build为此应用程序所在的项目中的目录。


四、查看应用程序模块中的构建文件

打开模块中的build.gradle文件app。第一行是:

apply plugin: 'com.android.application'

这将“应用”Android插件(buildscript在顶级构建文件的部分中引用)到当前项目。Gradle中的插件可以为Gradle项目添加自定义任务,新配置,依赖关系和其他功能。在这种情况下,应用Android插件会添加各种各样的任务,这些任务由android下一个块组态。

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "org.gradle.helloworldgradle"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner
            "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
        }
    }
}

这些属性与Gradle构建系统相比,与Android相关,对于这些属性将不会在这里进行轻描淡写。简而言之:

  • 该compileSdkVersion和buildToolsVersion与Android SDK的关联,并且应该永远是每个最新版本

  • 该defaultConfig部分保存由应用程序的所有变体(构建类型和变体的组合)共享的属性。

  • 这applicationId是基于创建应用程序时指定的域名和项目名称,并且在Google Play商店中必须是唯一的。

  • 该值minSdkVersion是您愿意为此应用程序支持的最小Android API,而targetSdkVersion应该是最新的Android版本。

  • 该值versionCode应该是在将新版本的应用程序上传到Google Play商店之前递增的整数。与此同时,这个值applicationId告诉Google,这是一个现有应用程序的新版本,而不是一个新的应用程序。

  • 该versionName值用于您自己的内部版本跟踪。

  • 该testInstrumentationRunner属性配置为使用为Android应用程序配置的JUnit 4测试运行器。

在这一节下面是一个叫做“块”的块buildTypes。默认情况下,Android应用程序支持两种构建类型,debug和release。此部分允许您配置你喜欢的一个。该debug部分在此处未显示,这意味着debug正在使用的所有默认设置。

在android块之后,有一个块显示用于此应用程序的库。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
}

配置依赖关系是构建Gradle应用程序的基础。在这种情况下,dependencies部分显示的值compile,testCompile和androidTestCompile配置。

首先采取最简单的方法,testCompile依赖关系只包含最新稳定的JUnit 4分发。JUnit类和测试注释将在编译时在src/test/java层次结构中可用。

该androidTestCompile依赖性是指咖啡的测试库,用于Android应用程序的集成测试。在这种情况下,请求没有support-annotations通常包含的库的Espresso ,因为已经通过其他依赖关系包含了不同的版本。在稍后的步骤中,您将看到如何找出包含该库的版本以及为什么。

最后,有三行添加依赖关系的compile配置:

  • 第一个,fileTree(dir: 'libs', include: ['*.jar'])是fileTree将文件libs夹中的任何jar文件添加到编译类路径的依赖项

  • 第二个,com.android.support:appcompat-v7:25.3.1将Android兼容性库添加到项目中。这允许您在任何Android应用程序中使用与SDK版本7一样的材料设计主题和其他功能

  • 最后一行,com.android.support.constraint:constraint-layout:1.0.2将新的约束布局添加到项目中。结合兼容性库,您可以创建具有最新布局功能的应用程序


五、运行标准Gradle任务

Android Studio可以轻松地通过IDE构建和部署应用程序的调试版本,但最终仍然涉及到Gradle。要查看此内容,请在Android Studio中打开终端窗口(或打开外部命令提示符并导航到应用程序的根目录)。从那里你可以运行build任务。

$ ./gradlew build

这将执行许多任务,最终返回“建立成功”。要查看所产生的APK(Android软件包,Android应用的可部署版本),请查看目录app/build/outputs/apk。在那里你会发现两个文件:

  • app-debug.apk

  • app-release-unsigned.apk

调试APK是将部署到仿真器或连接设备的版本。如果要部署APK,您需要首先创建一个签名配置,这超出了本指南的范围,但这是资源中描述的一个简单的过程。

从终端,您还可以找出support-annotations项目中正在使用的模块的版本。为此,首先dependencies在app项目中运行任务,compile仅查询配置的详细信息。

$ ./gradlew :app:dependencies --configuration compile
:app:dependencies

------------------------------------------------------------
Project :app
------------------------------------------------------------

compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:25.3.1
|    +--- com.android.support:support-annotations:25.3.1
|    +--- com.android.support:support-v4:25.3.1
|    |    +--- com.android.support:support-compat:25.3.1
|    |    |    \--- com.android.support:support-annotations:25.3.1
|    |    +--- com.android.support:support-media-compat:25.3.1
|    |    |    +--- com.android.support:support-annotations:25.3.1
|    |    |    \--- com.android.support:support-compat:25.3.1 (*)
|    |    +--- com.android.support:support-core-utils:25.3.1
|    |    |    +--- com.android.support:support-annotations:25.3.1
|    |    |    \--- com.android.support:support-compat:25.3.1 (*)
|    |    +--- com.android.support:support-core-ui:25.3.1
|    |    |    +--- com.android.support:support-annotations:25.3.1
|    |    |    \--- com.android.support:support-compat:25.3.1 (*)
|    |    \--- com.android.support:support-fragment:25.3.1
|    |         +--- com.android.support:support-compat:25.3.1 (*)
|    |         +--- com.android.support:support-media-compat:25.3.1 (*)
|    |         +--- com.android.support:support-core-ui:25.3.1 (*)
|    |         \--- com.android.support:support-core-utils:25.3.1 (*)
|    +--- com.android.support:support-vector-drawable:25.3.1
|    |    +--- com.android.support:support-annotations:25.3.1
|    |    \--- com.android.support:support-compat:25.3.1 (*)
|    \--- com.android.support:animated-vector-drawable:25.3.1
|         \--- com.android.support:support-vector-drawable:25.3.1 (*)
\--- com.android.support.constraint:constraint-layout:1.0.2
     \--- com.android.support.constraint:constraint-layout-solver:1.0.2

(*) - dependencies omitted (listed previously)

BUILD SUCCESSFUL

从输出中可以看出,support-annotations模块25.3.1是appcompat-v7库的依赖。

查看所需版本的另一种方法是使用dependencyInsight任务。运行以下命令(全部在一行)。

$ ./gradlew :app:dependencyInsight --dependency support-annotations \
 --configuration compile
:app:dependencyInsight
com.android.support:support-annotations:25.3.1
+--- com.android.support:appcompat-v7:25.3.1
|    \--- compile
+--- com.android.support:support-compat:25.3.1
|    +--- com.android.support:support-v4:25.3.1
|    |    \--- com.android.support:appcompat-v7:25.3.1 (*)
|    +--- com.android.support:support-vector-drawable:25.3.1
|    |    +--- com.android.support:appcompat-v7:25.3.1 (*)
|    |    \--- com.android.support:animated-vector-drawable:25.3.1
|    |         \--- com.android.support:appcompat-v7:25.3.1 (*)
|    +--- com.android.support:support-media-compat:25.3.1
|    |    +--- com.android.support:support-v4:25.3.1 (*)
|    |    \--- com.android.support:support-fragment:25.3.1
|    |         \--- com.android.support:support-v4:25.3.1 (*)
|    +--- com.android.support:support-core-utils:25.3.1
|    |    +--- com.android.support:support-v4:25.3.1 (*)
|    |    \--- com.android.support:support-fragment:25.3.1 (*)
|    +--- com.android.support:support-core-ui:25.3.1
|    |    +--- com.android.support:support-v4:25.3.1 (*)
|    |    \--- com.android.support:support-fragment:25.3.1 (*)
|    \--- com.android.support:support-fragment:25.3.1 (*)
+--- com.android.support:support-core-ui:25.3.1 (*)
+--- com.android.support:support-core-utils:25.3.1 (*)
+--- com.android.support:support-media-compat:25.3.1 (*)
\--- com.android.support:support-vector-drawable:25.3.1 (*)

(*) - dependencies omitted (listed previously)

BUILD SUCCESSFUL

无论是dependency和dependencyInsight任何Gradle项目任务是可用的。他们可以帮助您跟踪和解决库版本冲突的任何问题。


六、使用Gradle窗口

Android Studio包含一个用于执行Gradle任务的特殊窗口。Android项目提供超过80个不同的任务,此窗口尝试将其组织到类别中。

打开下面的Tasks文件夹:app,然后查看该android类别。下图显示了一个例子。

Gradle窗口签名报告

由于signingReport任务不需要任何参数,您可以直接双击它来执行。结果如下图所示。

运行和Gradle控制台

该signingReport任务告诉您公钥在哪里存储(这里是debug.keystore用户根目录下的文件),其别名及其MD5和SHA1散列。

请注意,目前没有释放密钥。查看install类别中Gradle窗口中列出的任务,如下图所示。

Gradle窗口安装

你会看到有一个installDebug任务和一个uninstallDebug任务,一个uninstallRelease任务,甚至一个uninstallAllTask。然而,由于缺席而显而易见,这是一项installRelease任务。该任务仅在您创建发布密钥的签名配置时可用,Gradle可用于创建签名的发行版APK。

如果您现在要启动多个仿真器或附加多个设备,则可以通过执行installDebug任务将应用程序部署到所有这些设备中。

$ ./gradlew installDebug

这不同于通过IDE运行应用程序。在这种情况下,您将选择单个连接的设备或仿真器,并且将安装该应用程序并启动它。installDebugGradle 的任务将会在所有连接的设备上部署应用程序,尽管它不会启动任何应用程序。结果将与下图相似。

Android Emulator Pixel API 25
Android模拟器Nexus 9 API 23

您可以像往常一样双击图标来启动应用程序。您也可以使用uninstallAll任务删除该应用程序。

$ ./gradlew uninstallAll

这将从所有连接的设备中删除该应用。


七、运行构建扫描

构建扫描会生成关于构建的所有依赖项,插件,测试输出和性能的完整报告。您可以通过--scan使用版本3.4及以上版本的任何Gradle命令附加标志,或使用-Dscan早期版本的Gradle上的标志来请求构建扫描。

为了使用构建扫描,您需要添加构建扫描插件并同意许可证。有关详细信息,请参阅...中的Build Scan入门指南,但总而言之,将以下部分添加到顶级build.gradle文件:

buildscript {
    repositories {
        jcenter()
        maven { url 'https://plugins.gradle.org/m2' }    
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.4.0-alpha7'
        classpath 'com.gradle:build-scan-plugin:1.7.1'   
    }
}

apply plugin: com.gradle.build-scan                      

buildScan {                                              
    licenseAgreementUrl = 'https://gradle.com/terms-of-service'
    licenseAgree = 'yes'
}

现在当你运行:

$ ./gradlew build --scan

您将收到一个链接到结果,托管在Gradle。结果页面将类似于:

构建扫描HelloWorldGradle

随意探索所有细节。该报告包含许多功能的信息,包括依赖关系。如果您挖掘依赖关系部分并打开_debugCompile配置,appcompat-v7库内部是support-annotations前面描述的库。

构建扫描dep支持注释

构建扫描是分析您的构建的有效方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容