Я работал над ужасной неправильной интеграцией ключей API в процесс сборки и управления исходным кодом, сделав его свойством, хранящимся в local.properties
.Я должен был добавить следующее к build.xml
:
<property name="mapviewxml" value="res/layout/mapview.xml" />
<target name="-pre-build">
<fail unless="mapsApiKey">You need to add mapsApiKey=... to local.properties</fail>
<copy file="mapview.xml.tpl" tofile="${mapviewxml}" overwrite="true">
<filterchain>
<replacetokens>
<token key="apiKey" value="${mapsApiKey}"/>
</replacetokens>
</filterchain>
</copy>
</target>
Теперь, конечно, мне пришлось создать mapview.xml.tpl
в корне моего проекта (он не может перейти к res/layout
, потому что он сломаетпроцесс сборки):
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="@apiKey@"
/>
Во время предварительной компиляции шаблон копируется в нужное место и @ apiKey @ заменяется реальным ключом.К сожалению, я не нашел способа различить отладочную и выпускную сборки на этом этапе, поэтому для компиляции для выпуска я просто добавляю выпуск apiKey к параметрам ant:
ant -DmapsApiKey=.... release
Этот подход хорошо интегрируется с SCM(Мне не нужно проверять ключи) и приемлемо с процессом сборки.