如何从头开始设置Android Studio项目,允许我使用groovy

时间:2015-05-16 18:14:22

标签: android groovy android-studio

Groovy的2.4版本附带官方支持Android应用程序开发http://docs.codehaus.org/display/GROOVY/Groovy+2.4+release+notes

以前使用eclipse进行Android开发,完全没有使用Android Studio或使用Gradle的经验,现有的使用Android Studio设置groovy android项目的说明(例如http://docs.groovy-lang.org/docs/next/html/documentation/tools-groovyc.html#section-androidhttps://github.com/groovy/groovy-android-gradle-pluginhttp://hosain.net/2015/02/07/getting-started-with-android-development-using-groovy-2.4-and-android-studio.html)太模糊,不适合我,而且他们使用的版本号的差异令人困惑。

我希望看到适用于Android的Android Studio 1.2.1.1的详细分步说明,并说明如何确定版本号。

1 个答案:

答案 0 :(得分:20)

编辑:2019年,问题和答案差不多4年后,下面描述的方法不再适用于当前的Android Studio版本(3.3.2)。我找不到仍然有效的依赖项版本,Gradle抱怨无法下载某些依赖项。

事实上,4年后Groovy维护人员仍然没有可重复的设置指南,这只是Groovy for Android没有前途的一个指标。我们应该看到很久以前关于Groovy的动态能力如何简化Android开发的模式的讨论,但这种情况还没有发生。我接下来会尝试使用Kotlin,除了所需的类型注释之外,它看起来与Groovy相似,但最重要的是:一个人不必如此努力地对抗Android Studio来使用它。

最初的答案如下,它是针对一个非常具体的Android Studio版本,扩展了猜测如何在未来的Android Studio版本中调整依赖版本。根据评论,这一直有效,直到Android Studio 3.0.1。

在我自己学习如何做之后,这是我在开始时想要阅读的逐步描述。我使用了许多来源的信息。这些资源都不适用于我,它们的版本号和插入构建脚本的位置不同。这些说明是尝试各种组合并填写一些空白的结果。

Android Studio welcome screen

在欢迎屏幕上,选择"启动新的Android Studio项目"。

new project wizard, page 1

填写应用名称和"公司域名"。

new project wizard, page 2

此页面无需更改。

new project wizard, page 3

此示例使用空白活动。

new project wizard, page 4

此示例使用名称GroovyActivity作为主Android屏幕。现在创建了新项目。当android studio完成项目创建时,它会显示两个打开的文件:

newly created project, initial files opened

忽略"呈现问题"目前。它将在以后的编译过程中自行解决。通过单击其选项卡的十字架来关闭这两个打开的文件。

打开此build.gradle(Module:app)文件:

build.gradle script for the app, original content

在第一行之前插入以下代码:

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.1.0'
            classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.6'
        }
    }

inserted code at top of gradle script

让我们暂停一下,以反映版本号。行

            classpath 'com.android.tools.build:gradle:1.1.0'

            classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.6'

包含版本号。你怎么知道在这里插入哪个版本号?在您阅读这些说明时,可能有新版本,除非您有特定的版本要求,否则您将需要使用gradle脚本中使用的最新版本。

您如何了解最新版本?这取决于:

请注意,编辑器突出显示了带有黄色背景颜色的com.android.tools.build:gradle:1.1.0。将鼠标指针悬停在此文本上时,会出现工具提示:

Tooltip indicating that there is a newer version of this gradle thing

所以似乎android studio知道这个东西的最新版本并建议你使用它。听取建议并将此版本号更新为您的android studio版本所指示的内容。

然而,这个gradle-groovy-android-plugin的东西没有出现这样的工具提示。

无论如何,这里发生了什么?我理解它的方式,这些名称和版本号识别用于您的应用程序或用于构建您的应用程序的二进制组件的名称,但它们既不是android studio的一部分,也不是您希望自己查找和安装或编译它们。相反,此构建脚本指定了一个存储库位置,希望可以从中下载这些二进制组件。函数jcenter()似乎返回存储库的位置。目前,此存储库是bintray.com。

要了解这个gradle groovy android插件的最新版本,请使用您的webbrowser访问bintray.com并使用其搜索功能。搜索groovy-android-plugin。在我写这篇文章的时候,结果的开头看起来像这样:

bintray search results for groova-android-plugin

所列结果的绝对数量有点令人沮丧。我希望他们在那里有一些相关的排序。搜索第一页,我只看到2个相关的匹配,最新的版本号是0.3.6。

了解了最新版本号(在撰写本文时),gradle脚本的正确启动是以下代码:

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.2.3'
            classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.6'
        }
    }

返回修改gradle脚本,在" apply插件后插入以下代码:' com.android.application'"行:

    apply plugin: 'groovyx.grooid.groovy-android'

gradle script with groovy plugin "applied"

最后,在gradle脚本的末尾附近插入一行

    compile 'org.codehaus.groovy:groovy:2.4.1:grooid'

所以它看起来像这样:

adding dependency on android-specific groovy compiler

同样,这里有一个版本号,你可以通过搜索* grooid.jar找到bintray的最新版本(是的,以星号作为第一个字符)。结果列表跨越两页,在第二页上我发现2.4.3是最新版本:

searchin bintray for latest version of android specific groovy compiler

更改gradle文件后,gradle需要" sync" ed。如果你完全退出android studio并重启它,gradle会同步,所以这就是我此时所做的。此图显示重启后的同步:

gradle syncing

后来我在工具栏中找到了这个图标

The toolbar icon to initiate a gradle sync

触发同步。

同步完成后,从" Android"更改左窗格查看"项目"使用下拉菜单查看:

Left-pane pull-down-menu in action

现在至少在模拟器中构建并执行一次项目。我不确定这会发生什么变化,但是如果你现在不构建和执行你的项目,虽然一切仍然只是java源代码,那么在我们改为groovy后你的groovy源代码将无法找到。您可以使用工具栏中的运行图标或键盘快捷键shift-F10来构建和运行项目。

在模拟器中执行项目后,转回左侧窗格,该窗格仍显示"项目"视图。在此视图中,导航到app / src / main目录,该目录当前包含子目录java和res,以及AndroidManifest.xml文件。

您现在将创建一个额外的" Java文件夹"在主菜单下方,在上下文菜单的帮助下:

Context menu for creating a new Java Folder

请务必使用菜单项New-> Folder-> Java Folder和 not New-> Directory,这将在以后引起问题。

在下一个屏幕中,

Name for new directory

勾选复选框"更改文件夹位置"并确保输入字段中的名称是src / main / groovy。

如果您仍然打开该gradle脚本,您将看到它已被调整并包含以" sourceSets"开头的行中新目录的名称。为了更好地衡量,请单击gradle同步图标以确保所有内容都已正确同步。

The toolbar icon to initiate a gradle sync

接下来,您希望实现新的groovy文件夹包含应用程序包名称的正确包路径。我发现正确实现这一目标的唯一方法是使用groovy文件夹的上下文菜单创建一个新的临时java类,

Context menu for creating new class in groovy folder

并输入使用包名称完全限定的此类的名称:

Entering full package name for new class

确保包名称的拼写正确无误!

新包将出现在groovy文件夹中,并在其中,即临时java类。

所有groovy类以及以某种方式使用groovy类的所有java类都必须位于src / main / groovy目录下,而不是src / main / java目录下。我们现在可以将Activity类从java目录树拖到groovy目录下面的同一个包中:

Moving the activity to the groovy directory

现在可以删除临时类(使用上下文菜单),并且可以通过从上下文菜单中选择Refactor-> Rename File,将Activity类从.java迁移到.groovy。

Java to Groovy through rename file

文件扩展名.java只是替换为.groovy扩展名。以同样的方式,您可以稍后创建新的Java类,并在您真正想要创建groovy类时将其文件重命名为.groovy。 您现在可以更改活动中的一些代码,以验证您是否可以在Android应用程序中实际拥有groovy代码。建议:

给#34; Hello World" text查看res / layout / activity_groovy.xml文件中的id,如下所示:

id through layout xml file

然后,使用groovy的字符串插值以编程方式更改此视图显示的文本:

Changing the label's text

在模拟器中构建和执行:

Executing the app with groovy code in the emulator, showing the id of the TextView inside the TextView