Anula la versión de Java cuando construye un proyecto Cordova con gradle

Estoy tratando de construir un proyecto de Córdoba usando gradle como una herramienta de construcción. En el proyecto Cordova tengo mi propio plugin que requiere Java 1.7.

En el build.gradle que viene con Cordova la versión java es 1.6. Build.gradle:

android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_6 targetCompatibility JavaVersion.VERSION_1_6 } } 

El build.gradle viene con una gran advertencia que dice que es un archivo generado que no debe ser editado, la forma de personalizar el paso de generación de gradle es – como yo entiendo – para crear un archivo build-extras.gradle.

He creado un archivo build-extras.gradle y he probado lo siguiente:

 android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } 

Pero no parece funcionar. Sigo recibiendo un error cuando construyo mi proyecto.

Error:

 > strings in switch are not supported in -source 1.6 > switch (action) { > ^ (use -source 7 or higher to enable strings in switch) 

¿Puede alguien por favor ayudarme a averiguar cómo configurar gradle para hacer este trabajo?

He estado tratando de resolver el mismo problema, y ​​vine aquí con la esperanza de encontrar una respuesta! De todos modos, aunque no hubo respuesta, tu mención de build-extras.gradle me puso en el camino correcto, y lo siguiente ahora funciona para mí … así que gracias.

Para empezar, pensé que también podría intentar usar la misma sintaxis que tú, para tratar de averiguar lo que estaba mal. Por lo que puedo decir que falla porque el archivo build-extras.gradle no se fusiona mágicamente en build.gradle , sino que es cargado y ejecutado usando el método Gradle apply from approach. Y puesto que esto sucede antes del cierre del android es demasiado temprano en el proceso, y esos valores del android sobrepasan nuestros valores "adicionales".

(No tengo tiempo para ahondar más de lo que necesito en Gradle o Groovy, así que disculpas si mi terminología no es precisa …)

Sin embargo, podría conseguir que funcione si he utilizado el método postBuildExtras() .

Si observa la parte inferior del archivo build.gradle generado por Cordova, verá que si existe tal método (es decir, postBuildExtras ) en ext , entonces se llama. Dado que esta es la última cosa en el script de configuración, supongo que el punto de este método es que podemos usarlo para anular cualquier cosa.

Por lo tanto, terminé con esto como mi build-extras.gradle :

 ext.postBuildExtras = { android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } } } 

En realidad tenía este trabajo muy temprano en mis investigaciones, pero siguió tratando de otros enfoques, ya que sospecho que esta técnica fallará cuando tratamos de tener múltiples build-extras.gradle archivos – que, dado que ambos estamos hablando específicamente sobre Cordova plugins, Es muy probable.

Hay una técnica que parece prometedora para plugins, que es usar el elemento <framework> en plugin.xml , pero con este enfoque nunca podría obtener el plugin de módulo específico para cargar / importar / lo que sea. Voy a echar un vistazo a esto cuando llegue a plugin # 2, pero por ahora la técnica descrita anteriormente me da un gran salto más allá en donde estaba esta mañana, así que gracias de nuevo por la pista build-extras.gradle . 😉

En cuanto a la respuesta de Mark, tengo una solución para agregar el build-extras.gradle en el archivo plugin.xml . Así que se agregará automáticamente a la carpeta de la plataforma en el lugar correcto.

 <source-file src="src/android/lib/build-extras.gradle" target-dir="src/.." /> 
  • ¿Es posible llamar a una función de extensión Java de Xalan en Android?
  • IabHelper error de Android (NullPointerException) launchPurchaseFlow?
  • "No se puede realizar esta acción en una instancia no sellada" excepción java.lang.IllegalStateException
  • Problemas de procesamiento de vista previa de diseño: No se admiten filtros de color PorterDuff
  • ¿Puede S3 de Amazon devolver los resúmenes de objetos en el orden de la fecha?
  • Cálculo de suma en android / java
  • Robolectric's Shadow Object y Mocking
  • Android FragmentActivity devuelve null en getActionBar ()
  • Causado por: java.lang.IllegalStateException: ParsePlugins ya está inicializado
  • Android AutoCompleteTextView con correo electrónico no
  • SetOnClickListener (nuevo OnClickListener () {})
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.