我配置我的android项目使用ant。使用关键字版本构建时,它会失败并显示以下消息:
java.lang.NullPointerException
at com.android.ant.ApkBuilderTask.execute(ApkBuilderTask.java:239)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
它在build.xml第249行失败,其中包含:
<macrodef name="package-helper">
<attribute name="sign.package" />
<element name="extra-jars" optional="yes" />
<sequential>
<apkbuilder
outfolder="${out.absolute.dir}"
basename="${ant.project.name}"
signed="@{sign.package}"
debug="${manifest.debuggable}"
verbose="${verbose}"> **LINE 249 IS HERE**
<file path="${intermediate.dex.file}" />
<sourcefolder path="${source.absolute.dir}" />
<sourcefolder refid="android.libraries.src" />
<jarfolder path="${external.libs.absolute.dir}" />
<jarfolder refid="android.libraries.libs" />
<nativefolder path="${native.libs.absolute.dir}" />
<nativefolder refid="android.libraries.libs" />
<extra-jars/>
</apkbuilder>
</sequential>
</macrodef>
从401行调用,其中包含以下行:
<target name="-package-release" depends="-dex, -package-resources">
<package-helper sign.package="false" />
</target>
看起来ApkBuilderTask.java存在一些问题,但我不知道如何/在哪里获取ApkBuilderTask.java的源代码。有没有人遇到这个问题并找到了解决方案?如果有帮助,我正在使用android SDK工具修订版7。
注意:运行“ant debug”或“ant release”都会产生相同的结果。
答案 0 :(得分:1)
这是r7工具中引入的更改。您需要按照上述指出的方式更新<apkbuilder>
中的build.xml
任务。
鉴于此错误仅在您自定义build.xml时发生,我认为您需要返回并重做自定义。如果您查找$ANDROID_SDK/tools/ant/ant_rules_r3.xml
并将其粘贴到build.xml
(替换上次粘贴的定义),则应该可以解决您的问题。
您可以在没有自定义的情况下离开,因为新版本的规则可以更加自定义,并且包含-pre-compile
和-post-compile
个钩子。
答案 1 :(得分:0)
以下是ant任务的源代码:
https://android.googlesource.com/platform/sdk/+/tools_r7/anttasks/src/com/android/ant
看起来变量mDexPath为null,我在<dex>
中看不到<apkbuilder>
元素。您是否在任何地方看到此警告:"WARNING: Using deprecated <file> inner element in ApkBuilderTask."
?
您是否创建了自己的ant脚本,或者您正在使用由android工具创建的项目?您可能希望将源代码,资源,AndroidManifest.xml和其他库/资产复制到新创建的Android项目中以进行修复。
答案 2 :(得分:0)
使用r8 SDK的另一个原因是你的apkbuilder调用缺少
resourcefile="${resource.package.file.name}"
属性。
如果你的错误是
com.android.ant.ApkBuilderTask.execute(ApkBuilderTask.java:257)
,将其添加到您的apkbuilder任务调用中。