美文网首页GradleAndroid Studio
构建Android应用程序

构建Android应用程序

作者: Android那些事儿 | 来源:发表于2017-07-13 20:50 被阅读36次

    文章摘要
    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支持注释

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

    相关文章

      网友评论

        本文标题:构建Android应用程序

        本文链接:https://www.haomeiwen.com/subject/oqjghxtx.html