ruta - Administrar la clave API de Google Maps con Gradle en Android Studio
gradle google maps api (4)
Sé que Gradle es poderoso y me gustaría administrar las claves API para el desarrollo / producción de Google Maps
Actualmente, siempre necesito comentar manualmente una línea y descomentar la otra para que funcione. ¿Hay alguna manera de hacerlo automáticamente en Gradle con alguna configuración de lanzamiento personalizada?
<!-- MapView v2 API -->
<uses-library android:name="com.google.android.maps" />
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_DEV_KEY]" />
<!-- PROD
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_PROD_KEY]" />
-->
Como está usando gradle, puede hacer lo siguiente:
build.gradle
android {
.. .. ...
buildTypes {
debug {
resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
}
release {
resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
}
}
}
Y en su AndroidManifest.xml
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_api_key"/>
De esta forma, solo tienes un AndroidManifest.xml y estableces un valor en función de tu tipo de compilación. Espero que esto ayude.
En Android Studio (marcado con la versión 0.8.11) puede agregar la Actividad de Google Maps (Actividad Nuevo-> Google-> Google Maps) a su proyecto y Android Studio generará los archivos necesarios para usted, solo debe insertar sus claves. También hay instrucciones generadas. Busque los archivos google_maps_api.xml en sus carpetas de depuración / res / values / y release / res / values.
En Android Studio, existe el concepto de tipos de construcción y sabores, y puede usarlos para obtener lo que necesita. Los tipos de compilación son versiones diferentes de la aplicación que son funcionalmente idénticas pero pueden diferir en el código de depuración. Por defecto, todos los proyectos de Android Gradle tienen tipos de compilación de depuración y versión.
Los sabores son versiones de tu aplicación que son funcionalmente diferentes; puede tener gratis y pagado, por ejemplo. Por defecto, sus proyectos de Android Gradle no tienen ningún sabor, pero puede agregarlos.
Los tipos de compilación y los sabores se combinan (en lo que se llama una variante ) cuando se hace una compilación; en este ejemplo, puede tener construcciones freeDebug, freeRelease, paidDebug y paidRelease.
El sistema de construcción le permite anular fácilmente una cantidad de cosas en cada tipo / sabor / variante; Una de las cosas que puede hacer es anular partes del archivo AndroidManifest.xml. El sistema de compilación fusiona los diferentes fragmentos elegibles de manifiestos en un manifiesto maestro cuando construye una variante particular.
Con ese fondo en la mano, en su caso es posible que desee tener una clave de API diferente en la versión de depuración de su aplicación frente a la versión de lanzamiento. La versión de depuración es lo que usará en su desarrollo diario, depuración y prueba, y la versión de lanzamiento es lo que implementaría para los usuarios.
Para hacerlo, no coloque la clave de la API de Google Maps en el archivo AndroidManifest.xml de la aplicación principal en src/main
; en su lugar, agregue dos nuevas carpetas, src/debug
y src/release
y agregue allí los archivos AndroidManifest.xml. No incluya información completa en esos manifiestos nuevos, sino solo lo que es único sobre lo que se necesita para esa variante en particular. Sus archivos de origen se verán así:
Su archivo src/debug/AndroidManifest.xml
contendrá esto:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_DEV_KEY]" />
</manifest>
y src/release/AndroidManifest.xml
tendrá esto:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="[MY_PROD_KEY]" />
</manifest>
Para reiterar, no coloque ninguna clave API en el archivo src/main/AndroidManifest.xml
.
Si por alguna razón no quiere usar tipos de compilación para diferenciar, puede configurar los sabores dev y prod y dividirlo de esa manera; la anulación manifiesta funciona de la misma manera.
Puede lograr esto con la función de marcador de posición manifiesto: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support
en el archivo build.gradle:
buildTypes {
debug {
manifestPlaceholders = [ google_map_key:"your_dev_key"]
}
release {
manifestPlaceholders = [ google_map_key:"prod_key"]
}
}
y luego en manifiesto:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="${google_map_key}"/>
Eso es lo mismo para diferentes teclas para diferentes sabores y esta es una solución más limpia que el uso de recursos de cadena.