Статьи

Создание приложений для Android с помощью Groovy 2.4

Несколько дней назад  был выпущен Groovy 2.4 . Одна из главных новостей заключается в том, что Groovy официально поддерживает разработку приложений для Android. Чтобы увидеть, как это работает, я использовал Groovy для создания небольшого примера приложения для Android. В этой статье я покажу, какие шаги необходимы для создания приложения Android с помощью Groovy, и как Groovy может упростить разработку приложений для Android.

На следующем экране показан пример приложения, написанного на Groovy. Вы можете найти полный исходный код на GitHub .

Запуск Groovy на Android
Сначала нам понадобится  Android Studio,  которая уже содержит последнюю версию Android SDK. За последний год стандартная среда Android изменилась с Eclipse и Ant на Android Studio (построена на IntelliJ) и Gradle. 
Для запуска Groovy на Android нам понадобится плагин Gradle, поэтому убедитесь, что вы не используете старые инструменты разработки на основе Eclipse / Ant.

Мы создаем новый проект Android в Android Studio и добавляем следующие строки в наши файлы сборки:

Файл сборки верхнего уровня ( <project> /build.gradle ):

buildscript {
  ..
  dependencies {
    ..
    classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.5'
  }
}

Файл сборки приложения ( <project> /app/build.gradle ):

apply plugin: 'com.android.application'
 
// apply Groovy Android plugin after the standard Android plugin
apply plugin: 'groovyx.grooid.groovy-android'
 
dependencies {
  ..
  compile 'org.codehaus.groovy:groovy:2.4.0:grooid'
}

Исходный код и документацию к Groovy Android Gradle Plugin можно найти на  GitHub .

Это все, что нам нужно, теперь мы можем перейти прямо к Groovy-коду.

Обратите внимание, что файлы кода Groovy должны быть помещены в src / main / groovy вместо src / main / java. Добавление файлов Groovy в src / main / java не будет работать!

Разработка приложений для Android в Groovy работает точно так же, как и в Java. Благодаря функциональной совместимости Groovy с Java вы можете использовать и расширять классы Android, как в Java.

Я использую Groovy в Android Studio.
Android Studio уже содержит плагин Groovy. Таким образом, вы получаете поддержку синтаксиса Groovy из коробки.

Однако вы можете пропустить опцию создания новых классов Groovy из контекстного меню. К счастью, это можно легко настроить в Android Studio. Вам просто нужно создать новый шаблон файла ( Настройки> Шаблоны файлов и кода ) и добавить следующий код шаблона:

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
class ${NAME} {
}

Теперь вы можете быстро создавать новые классы Groovy с помощью контекстного меню:

Вы также можете заглянуть в  этот плагин,  который устраняет проблему, при которой вы не получаете автоматического завершения при переопределении методов суперкласса в Groovy. Спасибо  @ arasthel92,  который рассказал мне об этом плагине.

Запуск приложений
Groovy Запуск приложений Groovy идентичен запуску приложений Java. Мы можем просто нажать кнопку  запуска  (или  отладки ) в Android Studio и развернуть приложение на подключенном (или эмулируемом) устройстве.
Круто то, что Groovy отладчик работает из коробки. Мы можем отлаживать запущенные приложения Groovy из Android Studio.

The great parts
The cool thing about Groovy is that it reduces the lines of code you need to write a lot. Its dynamic nature also lets you get rid of all the type casts that are typically required when working with Android.

One example of this can be found in ToDoListActivity.onResume(). In this method the data of an Android ListAdapter is modified. With Java this would look like this: 

ArrayAdapter<ToDo> adapter = (ArrayAdapter<ToDo>) getListAdapter();
ToDoApplication application = (ToDoApplication) getApplication()
adapter.clear()
adapter.addAll(application.getToDos());
adapter.notifyDataSetChanged()

With Groovy we can simply rewrite it like this:

listAdapter.clear()
listAdapter.addAll(application.toDos)
listAdapter.notifyDataSetChanged()

Groovy’s closures are another feature that comes very handy when working with Android.

To add a click listener to a button you write something like this in Java

Button button = (Button) findViewById(R.id.newTodoButton);
button.setOnClickListener(new View.OnClickListener() {
  @Override
  void onClick(View v) {
    ...
  }
});

With Groovy it is just

def button = findViewById(R.id.newTodoButton)
button.onClickListener = {
  ...
}

See CreateNewTodoActivity for a complete example.

Be aware of runtime errors
Dynamic languages typically tend to increase the number of errors you find at runtime. Depending on the app you are building this can be a serious issue. Larger Apps can have a significant deployment time (the app needs to be packaged, copied via USB to the device, installed and started on the device).
Groovy’s @CompileStatic annotation can be used to tackle this issue. It can be used to compile parts of your Groovy code statically to reduce runtime errors:

@CompileStatic
class ToDoListActivity extends ListActivity {
  ..
}
The downside of @CompileStatic is that you can (obviously) no longer use Groovy’s dynamic features.

Quick summary

It is very easy to get Groovy running on Android. Because of Groovy’s interoperability with Java it is also very easy to mix Groovy and Java in the same application. The Groovy integration in Android Studio is actually better than I have expected (however, some manual tweaks are still required).