用Gradle在Visual studio上构建Android应用程序

[原文发表地址] Build your Android applications in Visual Studio using Gradle

[原文发表时间] 2016/6/12

本文将要谈论如何在visual studio中使用Gradle构建Android数据库(.AAR)和APK's以及如何利用Maven依赖项。如果你刚开始接触Gradle,可以看看gradle概述用户指南

Gradle成为Android的构建系统已经有相当长一段时间而且安卓开发者也已经慢慢转移到Gradle上来。Gradle不仅灵活而且具备定义共同标准Android版本的能力。Gradle允许安卓开发者使用简单的声明性的DSL来配置,Gradle构建支持各种各样的安卓设备和应用程序。

用一个简单的,声明性的领域特定语言(DSL),Gradle开发者能够轻松的描述和操作构建逻辑(例如:清单条目- minSDK 版本, targetSDK版本等等),通过Maven或者Ivy使用内置的依赖管理,基本上拥有了简单的,权威性的构建,这集合了Android Studio IDE 和来自命令行的构建的能力,但是这种能力在最近的Visual Studio中已经消失了。

现在开始 :

伴随着最新版本的发布,如果你在文件->新建项目的模板路径下看到了跨平台模板板块,你将会发现如下图显示的各种模板。注意这里介绍了两个新的Gradle模板。

‘Basic Android Application (Android, Gradle)’模板 正如其名称所暗示的将会构建一个E2E的安卓应用程序(.APK) ,‘Basic Android Application (Android, Gradle)’模板将会构建一个被称为安卓工件的AAR文件。对于传统的JAVA用户,AAR类似于Jar文件,两者的不同在于AAR包含了布局组件,绘图工具等等。这使得能更容易创建自包含的可视化组件。比如说,如果你有多个应用程序使用了相同的登录屏幕,使用Jar你可以共享类而不用共享配置本身。带有AAR的所有东西都被捆绑在一个包文件中。下面让我们看看基础的安卓应用程序的结构。

 

理解Gradle artifacts

当你从模板中创建新项目,你将会注意到顶级构建。Gradle文件就位于项目的根目录中,定义适用于项目中所有模块的构建配置。预设的,顶级构建文件使用buildscript{}块去定义gradle资源库和通用项目中所有模块的依赖项。下面的代码示例描述了默认设置和在创建新项目后你能在顶级窗口build.gradle.template中找到的DSL元素。

对于这个项目,repositories部分声明了Jcenter和mavenCentra两个节点,同时我们还介绍了Maven artifact的类路径依赖关系。这个artifact是一个包含了在属性页中为Gradle特定版本服务的安卓组件库(如下图)。

位于App目录下的模块级build.gradle.template文件,允许你为特定的模块配置构建设置。要特别强调的是关于build.gradle.template这个特定文件,事实上,它依据的是能极大削减配置时间的实验插件(0.4.0)。此外这个实验插件还允许NDK和CMake构建系统的集成,如果你的应用程序包含了C++代码,那么这点很重要。

安卓应用程序模块build.gradle.template文件示例使用实验插件来概述一些基本的DSL元素。

应用插件:com.android.model.$(ConfigurationType)’命令指定正在构建的项目的类型。你可以设置它为一个构建.APK文件的应用或者构建.AAR文件的应用。这种配置类型可以通过属性页“配置类型”属性来控制。

该插件使用的名称不同于标准的插件,“com.android.application”是为构建安卓APK或者“com.android.library”以防你构建安卓AAR库。下面一节的特定模块”build.gradle.template”文件是模型部分。模型部分覆盖了配置。安卓的闭包是以标准的用于编译的SDK版本和最低支持的SDK版本的方法。

在下一节”compileOptions”允许选择编译器所使用的语言水平。

android.buildTypes为此应用程序创建了debug和release的构建类型。虽然debug构建类型不会出现在构建的配置文件中。但获取配置时可以调试属性设置为true.这允许在安全的安卓设备上进行调试而且用默认的通用的密钥库来配置APK签名。

模型存储模块中的最后一节是productFlavors.一个产品的flavor定义一个由应用程序生成的自定义版本。单个项目可以有不同更改生成应用程序的风格。因为这个特定的build.gradle是针对一个NDK安卓应用程序,abiFilters.add运行轻松的搭建一个APK架构。

在build.gradle.template文件的最后一节是依赖关系部分。这里有三种依赖关系,而且你能在安卓文档站点上找到每种依赖关系。特殊的build.gradle.template仅仅定义了compile.filetree的依赖关系,就像下面展示的。${AarDependencies} 是我们增加的允许简单的Visual Studio项目引用。

compile fileTree(dir: ‘libs’, include: [‘*.jar’])一行指示生成系统在编译路径中包含所有的JAR文件内部的应用程序/库/目录和你最终包中的应用。

其他Gradle文件包含的您项目中的一部分是settings.gradle.template 文件。这个文件引用组成您项目的所有模块。

包括‘:app’ $(AarDependenciesSettings)

 

使用NDK集成

在Visual Studio中使用Gradle的 NDK集成是很容易的。通常你需要在模型部分为你的特定模块build.gradle.template添加ndk{},可能在android文档中使用android.source提供JNI 特定的源设置,但是在Visual Studio中为了包含一个本地的C/C++组件,你所需要做的是通过Cross-Platform-Android去创建一个新的本地组件并通过典型的项目引用从Gradle项目中添加它,如下所示。Visual Studio将自动在你正创建的安卓应用中照顾好你的本地库包。

或者你也可以使用标准的方法包含JNI来源和实验Gradle组件,如果那能更好的为你工作的话。Google为Android NDK提供了一个很好的示例列表而Gradle就在这个存储库中。有一些很小的改变,主要涉及到从”build.gradle”->”build.gradle.template”文件中拷贝内容,这些样本可以让你更好的使用Visual Studio。我们目前致力于可以自动的为你们提供一个Android Studio->Visual Studio Android项目转换器。如果你真的对这个转换器感兴趣的话请留下你的联系方式或者直接联系我。

 

在你的Android项目中引用Android库文件

基本上,在Visual Studio中主要用C++来生成Android应用程序。有时甚至需要在你的Android应用程序中为这些应用添加Android库文件例如AARs和JARs。这些可能是为了共享公共代码,资源和实用程序而生成的国产Android产物。

在此版本的Visual Studio,我们也使这个过程很容易。为了创建和引用一个AAR文件,你只需要从文件->新建项目(基础库(Android,Gradle))菜单下创建一个新的AAR文件然后通过添加项目引用把它包含在你的Android应用程序中,如图所示。

 

例:将Facebook SDK结合到你的安卓应用程序中

现在我们对Gradle生成系统如何工作有了基本的了解,现在让我们继续展示生成系统的真正魅力。如前所述,Gradle使它很容易与外部存储库集成。为了利用Facebook SDK(使用说明)我们所要做的是在特定模块build.gradle.template文件中使用编译依赖命令和添加下面一行代码(我们已经在脚本文件build.gradle中指定了Maven()和JCenter()存储库)

compile ‘com.facebook.android:facebook-android-sdk:4.7.+’这条命令声明了在Facebook SDK4.7及以上版本中的一个远程二进制依赖项。在生成时Gradle现在将自动从特定的JCenter资源库顶级build.gradle.template文件中获取依赖项。

这个机制不仅允许你指定和结合Facebook SDK作为构建时的组件同时也允许Visual Studio为Java语言服务性能 提供动力,就像为Facebook SDK API集扩展他们的智能感知功能,如图所示。

总结

本文概括了当前在Visual Studio中支持用Gradle生成Android应用程序。我们期待您尝试这些新的功能并分享您的反馈,无论是通过发送笑脸(使用#cpp2015),链接用户声音或者在本文下面添加评论。