IllegalAccessError:尝试在使用 ANT 构建 Android 时访问类 [英] IllegalAccessError: tried to access class while building Android with ANT

查看:24
本文介绍了IllegalAccessError:尝试在使用 ANT 构建 Android 时访问类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

We are building our android application with ANT. After upgrading to the latest SDK tools (Rev 21) and platform tools (Rev 16) along with setting the android:targetSdkVersion="17" in manifest.xml, our ant build fails with IllegalAccessError.

奇怪的是,双 ant 发布 成功了:

Strangely a double ant release succedes:

  • ant clean -> 构建成功
  • ant 发布 - > 构建失败
  • ant 发布 - > 构建成功
  • ant clean -> BUILD SUCCESSFUL
  • ant release - > BUILD FAILED
  • ant release - > BUILD SUCCESSFUL

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

While obviously what we actually want to do does not:

  • ant clean release - > 构建失败
  • ant clean release - > BUILD FAILED

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

I already regenerated the build.xml with android update project -p . resulting in the same beaviour.

参见下面的 ANT 输出:

See ANT Output below:

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

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

Many Thanks and kind regards from snowy Central Europe

推荐答案

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

Maybe this will help someone when stumbling over this error:

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

I had the same issue, the reason were duplicated JARs in Ant's classpath. In my case, checkstyle-5.6-all.jar was added to the ANT_HOME\lib folder which contained the above mentioned classes, that caused some errors due to duplicate classes and access between them.

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

In this case, I suggest adding a local classpath variable for the Ant target which uses this library and keep the ANT_HOME\lib as clean as possible.

这篇关于IllegalAccessError:尝试在使用 ANT 构建 Android 时访问类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆