2011-01-22 1 views
0

Я обновил свой SDK до 2.3, и мои скрипты сборки начали сбой. Я получаю эту ошибку:aapt basename attribute

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, но, по-видимому, basename больше не существует. Можете ли вы сказать мне, что я должен использовать вместо этого?

ответ

1

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

затем адаптируйте файл 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> 

Я думаю resourcefilename это имя генерируемого APK. Мои скрипты сборки генерируют apks и помещают их в каталог bin OK, без явного указания имени resourcefilename. Мой 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 

я закомментируйте Projectname в buid.xml, так что она будет забрать его из сборки .properties.