Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义类加载失败,java.lang.IllegalAccessError:预验证类中的类引用已解析为意外实现_Java_Android_Classloader - Fatal编程技术网

自定义类加载失败,java.lang.IllegalAccessError:预验证类中的类引用已解析为意外实现

自定义类加载失败,java.lang.IllegalAccessError:预验证类中的类引用已解析为意外实现,java,android,classloader,Java,Android,Classloader,我正试图根据自己的需要调整这个例子。为此,我设置了3个项目: 类加载测试: 标准android应用程序项目,包含上面链接中MainActivity的源,稍微调整(将DexClassLoader业务移动到名为“AndroidClassLoader”的类),参考下面的“iface”项目 iface: 一个android库项目,只包含一个接口,其中只有一个函数(“getMessage()”)返回字符串 可加载: 一个标准的android应用程序项目也引用了“iface”库,该库只包含一个实现该非常简单

我正试图根据自己的需要调整这个例子。为此,我设置了3个项目:

类加载测试: 标准android应用程序项目,包含上面链接中MainActivity的源,稍微调整(将DexClassLoader业务移动到名为“AndroidClassLoader”的类),参考下面的“iface”项目

iface: 一个android库项目,只包含一个接口,其中只有一个函数(“getMessage()”)返回字符串

可加载: 一个标准的android应用程序项目也引用了“iface”库,该库只包含一个实现该非常简单接口的类,并带有一个调整构建过程的自定义_rules.txt文件:

<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildLoadableDex" default="debug">
    <target name="-dex" depends="-compile, -post-compile, -obfuscate">
        <echo level="info">Custom -dex target</echo>
        <property name="out.dex.input.absolute.dir" value="${out.classes.absolute.dir}" />
        <dex executable="${dx}"
                output="${intermediate.dex.file}"
                dexedlibs="${out.dexed.absolute.dir}"
                nolocals="@{nolocals}"
                forceJumbo="${dex.force.jumbo}"
                disableDexMerger="${dex.disable.merger}"
                verbose="${verbose}">
            <path path="${out.dex.input.absolute.dir}"/>
        </dex>
    </target>

    <target name="-package" depends="-dex, -package-resources">
        <echo level="info">Custom -package target</echo>
        <jar destfile="${out.absolute.dir}/${ant.project.name}.jar"
            basedir="${out.absolute.dir}"
            includes="${dex.file.name}" />
    </target>
</project>
我确实明白这意味着LoadableClass接口“似乎”存在两次,但我不明白这是如何发生的,因为APK(classloadingtest)和loadable.jar使用完全相同的库项目进行编译,因此我不知道如何修复此错误


请随时请求编辑更多的代码,我只是不知道什么可能有用,也不想粘贴所有内容。

愚蠢问题解决了,我一直在尝试加载一个旧版本的loadable.jar。将此项保留在此处,这样其他人可能会受益,而不会浪费太多时间。

如果不使用“custom_rules.txt文件调整生成过程”,则会出现错误,是否尝试?
W/dalvikvm(14393): Class resolved by unexpected DEX: Lloadable/Test;(0x4294b620):0x5a6a7000 ref [Lclassloading/iface/LoadableClass;] Lclassloading/iface/LoadableClass;(0x42912fb8):0x5a4bf000
W/dalvikvm(14393): (Lloadable/Test; had used a different Lclassloading/iface/LoadableClass; during pre-verification)
I/dalvikvm(14393): Failed resolving Lloadable/Test; interface 6 'Lclassloading/iface/LoadableClass;'
W/dalvikvm(14393): Link of class 'Lloadable/Test;' failed
D/AndroidRuntime(14393): Shutting down VM
W/dalvikvm(14393): threadid=1: thread exiting with uncaught exception (group=0x41c622a0)
E/AndroidRuntime(14393): FATAL EXCEPTION: main
E/AndroidRuntime(14393): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
E/AndroidRuntime(14393):        at dalvik.system.DexFile.defineClass(Native Method)
E/AndroidRuntime(14393):        at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:211)
E/AndroidRuntime(14393):        at dalvik.system.DexPathList.findClass(DexPathList.java:315)
E/AndroidRuntime(14393):        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:58)
E/AndroidRuntime(14393):        at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime(14393):        at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime(14393):        at classloading.loading.AndroidClassLoader.findClass(AndroidClassLoader.java:56)
E/AndroidRuntime(14393):        at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime(14393):        at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime(14393):        at classloading.loading.AndroidClassLoader.loadClass(AndroidClassLoader.java:37)
E/AndroidRuntime(14393):        at classloading.ClassLoadingTest$1.onClick(ClassLoadingTest.java:60)
E/AndroidRuntime(14393):        at android.view.View.performClick(View.java:4211)
E/AndroidRuntime(14393):        at android.view.View$PerformClick.run(View.java:17267)
E/AndroidRuntime(14393):        at android.os.Handler.handleCallback(Handler.java:615)
E/AndroidRuntime(14393):        at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(14393):        at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(14393):        at android.app.ActivityThread.main(ActivityThread.java:4898)
E/AndroidRuntime(14393):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(14393):        at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(14393):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
E/AndroidRuntime(14393):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
E/AndroidRuntime(14393):        at dalvik.system.NativeStart.main(Native Method)