En esta receta se explica como configurar Android Studio para usar cómodamente ZeroC Ice en un proyecto cualquiera. Se utiliza el plugin de Gradle que proporciona ZeroC, pero se explican detalles que, a mi entender, faltan en la documentación.

Captura de pantalla de 2016-03-02 11:14:37

Dependencias

He probado satisfactoriamente este ejemplo con Android Studio 1.5.1, con Gradle 2.8 y ZeroC Ice 3.6. Aunque no es vital que el sistema tenga instaladas las librerías de Ice para Java (el plugin se las descarga automáticamente), sí es imprescindible que los translators de Java (slice2java y slice2freezej) estén disponibles, por lo que debes instalar:

$ sudo apt-get install libzeroc-ice-java

Configurar el plugin de Gradle: ice-builder

ZeroC proporciona un plugin para Android Studio que se encarga de compilar los ficheros slice. Para instalarlo, es necesario que modifiques el fichero build.gradle que encontrarás en la raíz de tu proyecto (tendrás al menos dos ficheros, uno en la raíz, myProject/build.gradle, y otro en cada uno de los módulos que hayas añadido, por ejemplo: myProject/app/build.gradle). En la sección buildscript > repositories, añade el repositorio maven de ZeroC:

buildscript {
  repositories {
    maven {
      url "https://repo.zeroc.com/nexus/content/repositories/releases"
    }
  }
}

Y debes añadir una nueva dependencia en la misma sección (buildscript):

buildscript {
  dependencies {
    classpath group: 'com.zeroc.gradle.ice-builder', name: 'slice', version: '1.0.5'
  }
}

De esta forma, Android Studio se podrá descargar automáticamente el plugin ice-builder. Por otro lado, para descargar los .jar de Ice, es necesario añadir el mismo repositorio en la sección allprojects > repositories del mismo fichero:

allprojects {
  repositories {
    maven {
      url "https://repo.zeroc.com/nexus/content/repositories/releases" 
    }
  }
}

Estos son todos los cambios necesarios para ese fichero. Ahora, debes modificar el fichero build.gradle del módulo específico de la aplicación Android (debe estar en una ruta similar a esta: myProject/app/build.gradle). En este caso, es necesario incluir el plugin al principio del fichero (justo después del ‘com.android.application’):

apply plugin: 'slice'

Lo siguiente que puedes hacer es configurar el plugin. En la página del proyecto puedes ver todas las opciones disponibles.

Configurar rutas externas

El plugin de Ice busca las interfaces (.ice) en src/main/slice por defecto. Sin embargo, si la definición de la interfaz es compartida, no siempre estará en esa ruta. A continuación se muestra un ejemplo diferente que compila ficheros slice a partir de rutas externas al proyecto:

slice {
  java {  
    files = [file("/usr/share/slice/duo/duo_idm.ice"),
             file("/usr/share/slice/idm/idm.ice")]
    args = "-I/usr/share/slice"
  }
  output = file("src/generated")
}

La opción output es importante si quieres que Android Studio encuentre los ficheros generados, y utilice los mecanismos de introspección que implementa. La ruta debe estar dentro de src.

Usar los ficheros generados

Para incluir en la compilación todos los ficheros que ha generado el translator, es necesario añadir la ruta en donde se han generado como un nuevo Source Root:

android {
  ...
  sourceSets {
    main.java.srcDirs += ["$project.slice.output"]
  }
}

Incluir la librería de Ice

Por último, es necesario añadir Ice como dependencia del módulo:

dependencies {
  ...
  compile 'com.zeroc:ice:3.6.1'
}

Referencias