开发环境Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )(代码

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发环境Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )(代码相关的知识,希望对你有一定的参考价值。

前言

参考 【IntelliJ IDEA】导出可执行 JAR 包 博客 , 导出可执行 JAR 包 ;





一、IntelliJ IDEA 中创建 Java / Kotlin 工程



在 IntelliJ IDEA 中创建 Java / Kotlin 工程 ,

注意选择 Kotlin/JVM 附加依赖库和框架 ,

设置工程路径和工程名 ;





二、准备 Java 和 Kotlin 代码



准备 Java 和 Kotlin 代码 ;

Java 代码 :

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello android !");
    }
}

Kotlin 代码 :

class Student {
    var name: String = "Tom"
    var age: Int = 18
}

fun main(args: Array<String>) {
    var student: Student = Student();
    print(student.name + " , " + student.age)
}





三、编译在 PC 上可执行的 Java / Kotlin JAR 包



右键点击 工程 根目录 , 在菜单中选择 " Open Module Settings " ,

在 " Project Structure " 对话框中的 " Artifacts " 选项卡 , 点击 " + " 按钮 , 选择 " Add " 下拉菜单中的 " JAR " 选项的 " From modules with dependencies " 子项目 ,

弹出 " Create JAR from Modules " 对话框 , 点击 " Main Class " 右侧的文件夹按钮 ,

Java 可执行程序的 META-INF/MANIFEST.MF 文件保存在 D:\\002_Project\\003_Java_Work\\workspace\\AndroidShell\\java-meta-inf 路径中 ;

可执行文件元数据 :

同样按照上述流程 , 在打包 Kotlin 程序的可执行文件 , Kotlin 可执行程序的 META-INF/MANIFEST.MF 文件保存在 D:\\002_Project\\003_Java_Work\\workspace\\AndroidShell\\kotlin-meta-inf 路径中 ;


可执行文件元数据 :

选择 菜单栏 / Build / Build Artifacts… 选项 ,


选择编译这两个 Artifact ;

编译完成后的可执行 JAR 文件 , 就在 D:\\002_Project\\003_Java_Work\\workspace\\AndroidShell\\out\\artifacts 目录下 , 其中

  • D:\\002_Project\\003_Java_Work\\workspace\\AndroidShell\\out\\artifacts\\AndroidShell_jar\\AndroidShell.jar 是 Kotlin 代码的可执行文件 ;
  • D:\\002_Project\\003_Java_Work\\workspace\\AndroidShell\\out\\artifacts\\AndroidShell_jar2\\AndroidShell.jar 是 Java 代码的可执行文件 ;





四、使用 dx 工具打包 DEX 字节码文件



参考 【Android 安全】DEX 加密 ( DEX 加密使用到的相关工具 | dx 工具 | zipalign 对齐工具 | apksigner 签名工具 ) 博客 ;

dx 工具 :

作用 : dx 工具的作用是将 class 或 jar 文件 生成 DEX 文件 ;

位置 : 该工具在 sdk 下的 build-tools 目录下 ,

使用命令 : dx –dex –output out.dex in.jar

dx --dex --output out.dex in.jar 

–output out.dex 表示要输出的 DEX 文件 ;

in.jar 表示输入文件 ;


在我的电脑上 dx 文件路径是 D:\\001_Develop\\001_SDK\\Sdk\\build-tools\\30.0.2\\dx.bat ;

将 dx 所在路径配置到环境变量中 ;





五、打包在 Android 中执行的 dex 文件



在 PC 中的可执行文件 , 打包成 dex 文件无法在 Android 中执行 ;

在 Android 中使用 dalvikvm 执行的 dex 文件 , 只能是使用 class 字节码文件打包 , 或者是没有 main 信息的可执行文件 , 这里选择使用 class 字节码文件打包 ;

注意 : Kotlin 代码编译的字节码文件 , 不能运行 ;


将 Java 可执行程序 , 打包到 DEX 文件中 ;

dx --dex --output java.dex Main.class




六、Android 中使用 dalvikvm 命令执行 dex 文件



前提 : 手机要 root , 否则无法执行任何操作 ;

将打包好的 java.dex 文件拷贝到 Android 中的 /data/system/debug 目录中 , 进入 /data/system/debug 目录 , 执行

dalvikvm -cp java.dex  Main

命令 , 即可运行打包好的 java.dex 文件的 Main 中的 main 函数 ;

以上是关于开发环境Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )(代码的主要内容,如果未能解决你的问题,请参考以下文章

计算机为何可以运行Java代码?

为啥要设置环境变量,环境变量有啥用

Android 逆向修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )

在 MacOS 的命令行中使用 Android Studio 的内置 Java

Flutter开发环境配置(MAC版)

Kotlin 协程协程简介 ( 协程概念 | 协程作用 | 创建 Android 工程并进行协程相关配置开发 | 异步任务与协程对比 )