атрибут базового имени aapt - PullRequest
0 голосов
/ 22 января 2011

Я обновил свой SDK до 2.3, и мои сценарии сборки начали давать сбой. Я получаю эту ошибку:

build.xml: 363: aaptexec не поддерживает атрибут «basename»

Для следующей строки в моем скрипте сборки:

<aapt executable="${aapt}" command="package" manifest="AndroidManifest.xml" resources="${resource.absolute.dir}" assets="${asset.absolute.dir}" androidjar="${android.jar}" outfolder="${out.absolute.dir}" basename="${ant.project.name}" />

Я не знаю, что изменилось в aapt, но, видимо, базового имени там больше нет. Можете ли вы сказать мне, что я должен использовать вместо этого?

1 Ответ

1 голос
/ 22 января 2011

У меня были похожие проблемы при обновлении с 2.1 до 2.3 с изменением символических имен во встроенных xmls «правилах». 2.1, казалось, использовал ant_rules_3.xml, теперь SDK 2.3 использует main_rules.xml в качестве отправной точки. Если, как и я, вы настроили свой build.xml на основе целей в файле правил, вам, вероятно, будет проще начать заново, создав образец проекта, как описано в: текст ссылки

затем адаптируем ваш build.xml для переопределения некоторых или всех целей, перечисленных в main_rules.xml. (Это в папке sdk \ tools \ ant). Я нашел этот процесс достаточно быстрым, и для простых проектов сгенерированные файлы работали «из коробки» с Ant. (Мне очень пришлось изменить build.xml для проекта, который содержал вторую исходную папку, содержащую файлы .aidl, так как main_rules.xml не мог с этим справиться)

Есть две цели, которые ссылаются на aapt в main_rules.xml, вероятно, именно эту вам нужно имитировать:

<target name="-package-resources">
    <echo>Packaging resources</echo>
    <aapt executable="${aapt}"
        command="package"
        versioncode="${version.code}"
        debug="${build.packaging.debug}"
        manifest="AndroidManifest.xml"
        assets="${asset.absolute.dir}"
        androidjar="${android.jar}"
        apkfolder="${out.absolute.dir}"
        resourcefilename="${resource.package.file.name}"
        resourcefilter="${aapt.resource.filter}">
    <res path="${resource.absolute.dir}" />
    <!-- <nocompress /> forces no compression on any files in assets or res/raw -->
    <!-- <nocompress extension="xml" /> forces no compression on specific file   extensions in assets and res/raw -->
    </aapt>
</target>

Я думаю, что имя_ресурса - это имя сгенерированного apk. Мои скрипты сборки генерируют apks и помещают их в каталог bin, без указания имени файла ресурсов в явном виде. Мой build.properties выглядит так:

#-----------------------------------------------
# The ONLY reference to the project's main base
#
projectname=MapProject1.2
#
#-----------------------------------------------

workspace.dir=/dev/projects/EclipseHelios/AndroidWorkspace
ant.project.name=${projectname}
outbasebase.dir=/dev/projects/AntBuilds
base.dir=${workspace.dir}/${projectname}
common_src=/dev/projects/CommonSource121210/GridSeviceAndUseGridService
source.dir=${base.dir}/src
outbase.dir=${outbasebase.dir}/${projectname}

out.dir=${outbase.dir}/bin
key.store=c:/users/me/my-release-key.keystore
key.alias=release_alias
key.store.password=*************
key.alias.password=*************
layout.dir=${base.dir}/res/layout

(кроме паролей конечно!)

Я закомментировал имя проекта в buid.xml, чтобы он брал его из build.properties.

...