文章目录
前言
一、Android 命令行与 PC 可执行 JAR 文件不兼容
二、Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件
前言
尝试在 Android 系统中执行 Java 程序 , 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 ) , 出现的错误记录 ;
一、Android 命令行与 PC 可执行 JAR 文件不兼容
尝试将 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 ) 三、编译在 PC 上可执行的 Java / Kotlin JAR 包 生成的 JAR 包打包成 dex 文件 , 打包过程中出错 ;
报错信息 :
D:\002_Project\003_Java_Work\workspace\AndroidShell\out\artifacts>dx --dex --output kotlin.dex AndroidShell_jar\AndroidShell.jar PARSE ERROR: class name (kotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader) does not match path (META-INF/versions/9/kotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader.class) ...while parsing META-INF/versions/9/kotlin/reflect/jvm/internal/impl/serialization/deserialization/builtins/BuiltInsResourceLoader.class 1 error; aborting D:\002_Project\003_Java_Work\workspace\AndroidShell\out\artifacts>
直接打包字节码文件是成功的 , 打包 PC 上的可执行文件失败 ;
二、Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件
使用
dalvikvm -cp kotlin.dex StudentKt
命令 , 执行 Kotlin 编译的 dex 文件 , 报错如下 :
1|walleye:/data/system/debug/AndroidShell # dalvikvm -cp kotlin.dex StudentKt Exception in thread "main" java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/jvm/internal/Intrinsics; at StudentKt.main(Unknown Source:2) Caused by: java.lang.ClassNotFoundException: Didn't find class "kotlin.jvm.internal.Intrinsics" on path: DexPathList[[dex file "kotlin.dex"],nativeLibraryDirectories=[/system/lib64, /system/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) ... 1 more 1|walleye:/data/system/debug/AndroidShell #
Java 代码编译的 Dex 文件可以执行 ;