【问题标题】:IllegalAccessError: tried to access class while building Android with ANTIllegalAccessError:尝试在使用 ANT 构建 Android 时访问类
【发布时间】:2013-05-28 20:27:19
【问题描述】:

我们正在使用 ANT 构建我们的 android 应用程序。升级到最新的 SDK 工具 (Rev 21)平台工具 (Rev 16) 并设置 android:targetSdkVersion="17"在 manifest.xml 中,我们的 ant 构建失败并出现 IllegalAccessError

奇怪的是双蚂蚁释放成功了:

  • ant clean -> 构建成功
  • ant 发布 - > 构建失败
  • ant 发布 - > 构建成功

虽然我们真正想做的显然不是:

  • ant clean release - > BUILD FAILED

我已经用 android update project -p 重新生成了 build.xml。 导致相同的行为。

请参阅下面的 ANT 输出:

release:

-pre-build:

-code-gen:
[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Manifest merger disabled. Using project manifest only.
     [echo] Handling aidl files...
     [aidl] No AIDL files to compile.
     [echo] ----------
     [echo] Handling RenderScript files...
[renderscript] No RenderScript files to compile.
     [echo] ----------
     [echo] Handling Resources...
     [aapt] Generating resource IDs...

BUILD FAILED
/home/me/android-sdks/tools/ant/build.xml:645: The following error occurred while executing this line:
/home/me/android-sdks/tools/ant/build.xml:683: java.lang.IllegalAccessError: tried to access class com.google.common.base.Platform from class com.google.common.base.CharMatcher
    at com.google.common.base.CharMatcher.precomputed(CharMatcher.java:684)
    at com.google.common.base.CharMatcher.<clinit>(CharMatcher.java:63)
    at com.google.common.base.Splitter.on(Splitter.java:129)
    at com.android.sdklib.internal.build.SymbolWriter.write(SymbolWriter.java:51)
    at com.android.ant.AaptExecTask.execute(AaptExecTask.java:711)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
    at com.android.ant.IfElseTask.execute(IfElseTask.java:120)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
    at org.apache.tools.ant.Main.runBuild(Main.java:809)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

Total time: 2 seconds

来自白雪皑皑的中欧的非常感谢和亲切的问候

【问题讨论】:

  • 我发现像 android-support-v7-appcompat 这样的依赖库项目会导致问题。

标签: java android ant


【解决方案1】:

也许这会在遇到此错误时对某人有所帮助:

我遇到了同样的问题,原因是 Ant 的类路径中的 JAR 重复。在我的例子中,checkstyle-5.6-all.jar 被添加到了包含上述类的 ANT_HOME\lib 文件夹中,由于重复的类和它们之间的访问而导致了一些错误。

在这种情况下,我建议为使用此库的 Ant 目标添加一个本地类路径变量,并尽可能保持 ANT_HOME\lib 干净。

【讨论】:

  • 问题不只是ANT_HOME/lib。在我的例子中,${user.home}/.ant/lib 有两个版本的同一个 jar。
【解决方案2】:

我遇到了同样的问题,几个小时后解决了。 只需使用最新的 ANT(但不是 Jenkins 随附的)
似乎 apache-ant-1.8.4 有一些问题。
但是在下载了最新的 apache-ant-1.9.1 之后,ant 能够成功使用 library-project 构建项目

使用库项目构建 ant 的系统配置:

>ANT: 1.9.1
>Android SDK - 22 rev
>java 1.6.0_38

【讨论】:

  • 您确定更新 Ant 解决了您的问题吗?我更新到“2013 年 7 月 14 日编译的 Apache Ant(TM) 版本 1.9.2”,我仍然遇到同样的问题。
猜你喜欢
  • 2021-01-21
  • 2013-09-01
  • 2011-11-04
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
相关资源
最近更新 更多