我将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中发生了什么变化,但显然基本名称已经不存在了。你能告诉我应该用什么吗?
答案 0 :(得分:1)
当从2.1升级到2.3时,我遇到了类似的问题,其中符号名称在内置的'rules'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一起“开箱即用”。 (我必须为包含第二个包含.aidl文件的源文件夹的项目更改build.xml,因为main_rules.xml无法处理它)
在main_rules.xml中有两个引用aapt的目标,可能是你需要模仿的那个:
<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目录中,没有我明确命名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
(当然除了密码!)
我在buid.xml中注释掉了projectname,因此它会从build.properties中取出它。