Подтвердить что ты не робот

Как я могу прикрепить различные файлы строковых ресурсов во время сборки android ant для выпуска и отладки?

Я хочу приложить различные файлы строковых ресурсов во время создания и отладки сборки android ant. Мне нужно, чтобы у меня была отдельная конфигурация для ключа карты api, удаленного хоста и т.д.

4b9b3361

Ответ 1

Я использую Eclipse для ежедневных отладочных сборников, затем Ant для релизов. У меня есть отладка и выпуск версий файла с ключом API Карт Google. Я изменил build.xml(я на SDK-инструментах R15), чтобы выполнить некоторое копирование соответствующего файла перед сборкой и впоследствии. Я изменил цели -pre-build и release так:

    <target name="-pre-build">
        <echo message="In pre build-----------------------------------" />
        <echo message="build target          ${build.target}" />
        <if condition="${build.is.packaging.debug}">
            <then>
                <echo>Copying debug api key************************************</echo>
                <copy file="${layout.dir}/googlemapdebug.xml" tofile="${layout.dir}/googlemap.xml" overwrite="true" />
            </then>
            <else>
                <echo>Copying RELEASE api key************************************</echo>
                <copy file="${layout.dir}/googlemaprelease.xml" tofile="${layout.dir}/googlemap.xml" overwrite="true" />
            </else>
        </if>
    </target>




<target name="release"
            depends="clean, -set-release-mode, -release-obfuscation-check, -package, -release-prompt-for-password, -release-nosign"
        ............. LINES OMITTED
        ............. 
            <!-- Zip aligns the APK -->
            <zipalign-helper in.package="${out.unaligned.file}"
                                       out.package="${out.final.file}" />
            <echo>Release Package: ${out.final.file}</echo>

            <echo>Always copy DEBUG MAPS API file back for Eclipse   **********************</echo>
            <copy file="${layout.dir}/googlemapdebug.xml" tofile="${layout.dir}/googlemap.xml" overwrite="true" />
        </sequential>
    </do-only-if-not-library>
    <record-build-info />
</target>

Я определяю layout.dir в ant.properties(новое имя для build.properties после SDK Tools 14):

projectname=MyProject
workspace.dir=/dev/projects/EclipseIndigo/AndroidWorkTwo
base.dir=${workspace.dir}/${projectname}
layout.dir=${base.dir}/res/layout

Вы можете адаптировать это в соответствии с вашими потребностями, предполагая, что у вас нет слишком большого количества файлов для обмена и вывода. Я думаю, вы могли бы добавить свойство для каталога, содержащего ваши strings.xml

Ответ 2

Ник, я не понимаю, почему вы также переписываете задачу выпуска. Я добавил только предварительную сборку, и она работает для меня.

<target name="-pre-build">
    <if condition="${build.is.packaging.debug}">
        <then>
            <echo>Copying debug config</echo>
            <copy file="./config/debug.xml" tofile="./res/values/config.xml" overwrite="true"/>
        </then>
        <else>
            <echo>Copying release config</echo>
            <copy file="./config/release.xml" tofile="./res/values/config.xml" overwrite="true"/>
        </else>
    </if>
</target>

Ответ 3

Все два ответа основаны на Eclipse ADT. Теперь Android Studio является более популярным IDE, вы можете воспользоваться системой сборки gradle.

В вашем build.gradle файле добавьте следующий код в тег android:

buildTypes {
        release {
            buildConfigField "boolean", "LOG_DEBUG", "false"
            resValue "string", "some_key", "AAAAAAA"
        }
        debug {
            buildConfigField "boolean", "LOG_DEBUG", "true"
            resValue "string", "some_key", "BBBBBBB"

            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
                }
            }
        }
    }

Вы можете использовать BuildConfig.LOG_DEBUG как значение boolean в вашем Java-коде. Просто запомните import your.package.name.BuildConfig;

Вы также можете использовать some_key как ресурс строки. Java-код его использования: R.string.some_key.