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

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

Ответы [ 3 ]

6 голосов
/ 26 ноября 2011

Я использую 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

3 голосов
/ 27 ноября 2011

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

<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>
2 голосов
/ 17 августа 2015

Все два ответа основаны на Eclipse ADT. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Теперь более популярная среда разработки Android Studio, вы можете воспользоваться системой сборки 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...