Управление ключами API Карт Google - PullRequest
4 голосов
/ 09 августа 2010

Мое приложение использует большое количество экранов MapView, и я пытаюсь понять, как управлять ключом API между средой отладки и производством.По-видимому, в Eclipse нет способа изменить ключ приложения отладки, поэтому я должен использовать ключ API карты отладки в этой среде.И наоборот, нет способа экспортировать пакет для бета-тестирования без ключа производственного приложения, поэтому я должен менять ключ API карты в каждом представлении, чтобы создать рабочий пакет.

Моей первой идеей было сделать это:

Все файлы MapView.xml имеют это:

android:apiKey="@string/googleMapsAPIKey"

И затем в strings.xml я помещаю это:

<string name="googleMapsPIKey">@string/debugGoogleMapsAPIKey</string>
<string name="debugGoogleMapsAPIKey">TheMagicKeyString</string>

Если это сработает, это позволитМне нужно изменить одну строку в strings.xml, и все MapViews будут обновлены при перестройке.Но это не сработало.Я думаю, strings.xml не может сделать ссылки на себя.Любые другие идеи?

Спасибо

Ответы [ 8 ]

8 голосов
/ 11 ноября 2011

Я рекомендую более простой подход, который предполагает использование маловероятной, но более конкретной папки ресурсов для размещения вашего ключа отладки. Для этого создайте файл res / values ​​/ maps-apikey.xml со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="maps_apikey">[productionApiKey]</string>
</resources>

Затем каждый разработчик локально добавит производный от него файл в файл res / values-v1 / maps-apikey.xml, в котором указан их ключ API отладки. Во время выполнения система Android предпочитает более конкретную версию res / values-v1 / maps-apikey.xml для всех версий Android (поскольку все они по крайней мере на уровне API 1 или выше).

Системы контроля версий, такие как git и svn, позволяют добавлять файл «ignore», который инструктирует инструменты игнорировать этот файл res / values-v1 / maps-apikey.xml, чтобы каждый разработчик случайно не фиксировал его в репозитории , Чтобы сделать это для git, просто добавьте файл res / .gitignore, который содержит только строку values-v1, затем зафиксируйте этот файл.

Чтобы выпустить программное обеспечение, просто удалите файл res / values-v1 / maps-apikey.xml перед экспортом выпуска. В результате APK будет ссылаться на версию в файле res / values ​​/ maps-apikey.xml, который является вашим правильным рабочим ключом.

3 голосов
/ 09 августа 2010

вы делаете правильные вещи, но я не думаю, что это правильно. Объявите вашу строку в strings.xml следующим образом:

<string name="googleMapsAPIKey">TheMagicKeyString</string>
<!-- You can add this at the end as comment to keep a copy of another key for instance, to exchange it between debug and production-->

Обратите внимание, что вы не дали одно и то же имя в своих 2 строках ... Одна называется отладкой, а другая нет.

2 голосов
/ 22 февраля 2011

Я использую maven и maven-android-plugin с каталогом повторного наложения, который используется только в конфигурации выпуска.

Следовательно, у меня есть файл res/values/google_api_key.xml, содержащий ключ отладки, и файл res-overlay-production/values/google_api_key.xml, содержащий производственный ключ, и последний переопределяет первый в производственном выпуске.

Я также использую Eclipse ADT, но он не знает о конфигурации выпуска, поэтому рад видеть ключ отладки, и я могу использовать XML-редакторы Android для настройки видов карты.

1 голос
/ 15 ноября 2012

Попробуйте что-то вроде этого:

String debugMapKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String releaseMapKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

String mapKey = BuildConfig.DEBUG ? debugMapKey : releaseMapKey;

MapView mv = new MapView(this, mapKey);
1 голос
/ 13 мая 2011

Я использую maven-android-plugin и использую хитрый механизм замены токенов, чтобы сделать это.

Я использую пример "morseflash" и добавил его в конфигурацию плагина maven-resources:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <phase>initialize</phase>
            <goals>
                <goal>resources</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
      <delimiters>
        <delimiter>${*}</delimiter>
        <delimiter>&gt;08*&lt;</delimiter>
      </delimiters>
    </configuration>
</plugin>

Плагин ресурсов позволяет вам определять странные разделители для поиска / замены. Ограничитель по умолчанию - ${*}, но я добавил >*<, чтобы он соответствовал содержимому элемента XML. (На самом деле я использовал >08*<; я объясню почему через минуту.)

Затем в моем strings.xml я написал это:

<string name="googleMapsAPIKey">08DEBUGKEYABCDEFBLAHBLAHBLAH</string>

И определил свойство Maven в профиле выпуска, например:

<profile>
    <id>release</id>
    <!-- via this activation the profile is automatically used when the release is done with the maven release
    plugin -->
    <activation>
        <property>
            <name>performRelease</name>
            <value>true</value>
        </property>
    </activation>
    <properties>
        <DEBUGKEYABCDEFBLAHBLAHBLAH>&gt;08RELEASEKEYABCDEFBLAHBLAHBLAH&lt;</DEBUGKEYABCDEFBLAHBLAHBLAH>
    </properties>
    <-- ... -->
</profile>

Это создает свойство Maven, названное в честь отладочного ключа Maps, значением которого является ключ отладки выпуска.

К сожалению, свойства Maven не могут начинаться с цифр. Мой ключ отладки и ключ разблокировки начинались с 08Wfj..., поэтому я использовал разделитель >08*< и обязательно включил >08 в строку замены.

1 голос
/ 01 февраля 2011

Я думаю, что это хороший способ сделать это!С исправлением Сефи это должно работать идеально.

Кроме того, если вы хотите автоматически переключать ключи между сборками отладки и выпуска, вы можете взглянуть на этот пост, который я только что написал: http://blog.cuttleworks.com/2011/02/android-dev-prod-builds/. Это помогло мне перестать беспокоиться о конфигурации при сборке для разных сред.

0 голосов
/ 22 апреля 2014

В консоли разработчика Google вы можете создать один ключ для нескольких кодов sha1 https://stackoverflow.com/a/13881624/1433372

0 голосов
/ 09 августа 2010

Вы можете установить пользовательское хранилище ключей отладки в окне Prefs -> Android-> Build.

...