2014-09-30 16 views
46

biliyorum Android Studio Gradle ile Google Maps API Anahtarını YönetGradle güçlüdür ve ben Google Maps geliştirilmesi/produciton API anahtarlarını yönetmek istiyoruz

Hep elle bir satır açıklama ve uncomment gerekir anda

Diğer çalışmak için. Bazı özel sürüm yapılandırmasıyla Gradle'da otomatik olarak yapmanın bir yolu var mı?

Android Studio'da
<!-- 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]" /> 
--> 
+0

Tam olarak ihtiyacım olan şey, iyi soru. – Radu

cevap

99

sen aşağıdakileri yapabilirsiniz gradle kullandığımız için bir AndroidManifest.xml uygulamanız var ve yapı türünüze göre değer belirliyorsunuz. Bu yardımcı olur umarım.

+2

Bu çözüm en son Android Studio sürümü (1.1 Beta 2) ile bir çekicilik gibi çalışır! Paylaşım için teşekkürler. – Superbyte

+2

Çeşitli ürün çeşitlerimin her birine yeniden değer ekledim ve harika çalıştı. – wapples

+0

Onları böyle saklamak güvenli mi? –

13

(sürümüyle 0.8.11 ile işaretli), sizi sadece projenize Google Maps Aktivite (New-> Google-> Google Haritalar Etkinlik) ekleyebilir ve Android stüdyo sizin için gerekli dosyaları oluşturur Anahtarlarınızı eklemek zorundasınız. Ayrıca oluşturulan talimatlar da vardır. Hata ayıklama/res/değerler/ve sürüm/res/değer klasörlerinizdeki google_maps_api.xml dosyalarını arayın.

+0

Evet, bu, Android'in daha yeni sürümleri ve Android Studio'yu kullanmak için geçerlidir: res> values> google_map_api.xml ve Donato

10

Android Studio'da, yapı türleri ve tatları kavramı var ve ihtiyacınız olanı almak için bunları kullanabilirsiniz. Oluştur türleri, işlevsel olarak aynı olan, ancak hata ayıklama kodunda farklılık gösterebilecek uygulamanın farklı sürümleridir. Varsayılan olarak, tüm Android Gradle projelerinde hata ayıklama ve sürüm oluşturma sürümleri var.

Tatlar, uygulamanızın işlevsel olarak farklı sürümleridir; örneğin, ücretsiz ve ücretli olabilirsiniz. Varsayılan olarak, Android Gradle projelerinizde herhangi bir lezzet yoktur, ancak bunları ekleyebilirsiniz.

Yapı türleri ve tatlar, bir yapı oluşturduğunuzda ( varyant olarak adlandırılır) birleştirilir; Bu örnekte, ücretsizDebug, freeRelease, paidDebug ve paidRelease yapıları oluşturabilirsiniz.

Yapı sistemi, her türdeki/çeşitteki/varyanttaki birçok şeyi kolayca geçersiz kılmanıza olanak tanır; Yapabileceğiniz şeylerden biri, AndroidManifest.xml dosyasının bölümlerini geçersiz kılmaktır. Yapı sistemi, belirli bir varyantı oluşturduğunda, tezahürlerin farklı uygun bitlerini bir ana tezahürle birleştirir.

Elinizdeki bu arka planla, uygulamanızın sürüm sürümüne karşı hata ayıklama sürümünde farklı bir API anahtarı olmasını isteyebilirsiniz. Hata ayıklama sürümü, günlük gelişiminizde, hata ayıklamada ve test etmede kullanacağınız şeydir ve yayınlama sürümü, kullanıcılara dağıttığınız sürümdür.

src/main ana uygulamanın AndroidManifest.xml dosyasında Google Maps API anahtarı koymak yok Bunu yapmak için; bunun yerine iki yeni klasör ekleyin, src/debug ve src/release ve AndroidManifest.xml dosyalarını buraya ekleyin. Bu yeni manifestolarda tam bilgi içermez, sadece bu özel varyant için neyin gerekli olduğu konusunda benzersiz olan şeyler. Kaynak dosyalarınız aşağıdaki gibi görünecektir:

<?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> 

ve src/release/AndroidManifest.xml bu olacak:

Screenshot of project directory structure showing multiple manifest files

Sizin src/debug/AndroidManifest.xml dosyası bu içerecektir

<?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> 

yinelemek için, yapmayın src/main/AndroidManifest.xml dosyasına herhangi bir API anahtarı koyun.

Herhangi bir nedenle, farklılaştırmak için yapı türleri kullanmak istemiyorsanız, dev ve prod tatlarını ayarlayabilir ve bunun yerine bölebilirsiniz; manifesto geçersiz kılma aynı şekilde çalışır. Size Bu şekilde

android { 
    .. .. ... 
    buildTypes { 
     debug { 
      resValue "string", "google_maps_api_key", "[YOUR DEV KEY]" 
     } 
     release { 
      resValue "string", "google_maps_api_key", "[YOUR PROD KEY]" 
     } 
    } 
    } 

Ve AndroidManifest.xml

<meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="@string/google_maps_api_key"/> 

yılında

build.gradle sadece:

+1

Tüm açıklamalar için teşekkürler. Cevabını büyük bir açıklama için öne sürdüm, ama Okas çözümünü daha zarif buldum, çünkü manifestin çoğalmasını engelliyor ve anahtarı bir XML kaynağı dizesine koyuyor. İlkenin senin açıklamanla aynı olduğunu biliyorum. – Hrk

23

manifest'ini tutucu özelliği ile bunu başarabilirsiniz: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support

build.gradle dosyasında:

buildTypes { 
    debug { 
     manifestPlaceholders = [ google_map_key:"your_dev_key"] 
    } 
    release { 
     manifestPlaceholders = [ google_map_key:"prod_key"] 
    } 
} 

ve sonra manifest'te: Farklı anahtarlar için kesin bir şey var

<meta-data 
    android:name="com.google.android.maps.v2.API_KEY" 
    android:value="${google_map_key}"/> 

farklı tatlar ve bu dize kaynakları kullanmaktan daha temiz bir çözümdür.