文章目录

  • 前言
  • 一、IntelliJ IDEA 中创建 Java / Kotlin 工程
  • 二、准备 Java 和 Kotlin 代码
  • 三、编译在 PC 上可执行的 Java / Kotlin JAR 包
  • 四、使用 dx 工具打包 DEX 字节码文件
  • 五、打包在 Android 中执行的 dex 文件
  • 六、Android 中使用 dalvikvm 命令执行 dex 文件

前言

参考 【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 命令 )相关推荐

  1. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )

    文章目录 一.拷贝 Assets 目录下的 classes.dex 字节码文件到内置存储区 二.加载 DEX 文件并执行其中的方法 三.MainActivity 及执行结果 四.博客资源 一.拷贝 A ...

  2. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)

    java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...

  3. 在命令行下执行php程序

    问题 安装phpredis扩展,在PHP.ini中添加extension=redis.so后,编写Redis.php文件 <code class="language-php hljs ...

  4. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )

    文章目录 一.DexClassLoader 构造函数简介 二.准备 DEX 文件 一.DexClassLoader 构造函数简介 DexClassLoader 构造函数如下 : /*** 创建一个{@ ...

  5. linux用命令行来执行php程序

    <?php $start = microtime(true); for($i=0 ; $i <10000 ; $i ++){// echo '正在执行第'.$i.'个操作! '.PHP_E ...

  6. 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )

    文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...

  7. Java程序员必备基础:Java代码是怎么运行的?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:一个线程池 bug 引发的 GC 思考!个人原创+1博客:点击前往,查看更多 链接:https://segmen ...

  8. 打成jar包 在命令行下执行java工程

    将java工程打成jar包,但第三方jar包并没有包含在包中,当在命令行中运行jar包时,出现类找不到的异常, 在网上看到解决办法是将第三方jar包放到JDK的扩展类文件夹中(%JAVA_HOME%/ ...

  9. pycharm中导出依赖包 在pycharm下边的Terminal打开命令行终端执行命令

    pycharm中导出依赖包 1 在pycharm下边的Terminal打开命令行终端执行命令 D:\nlp\salary\aSalary>pip freeze > d:\nlp\salar ...

最新文章

  1. 570D Codeforces Round #316 (Div. 2) D(dfs序,时间戳,二分
  2. 使用CoreText实现图文混排
  3. android studio 手动安装gradle,Android Studio 如何安装Gradle?
  4. C# 发出异步的Get请求
  5. 在每趟长途的HTML5挑运之后
  6. 【数字图像处理】Canny边缘检测详解及编程实现
  7. R7-3 极坐标->直角坐标 (10 分)
  8. 不知该买哪儿的房?数据分析来为你解答哪儿的房值得买
  9. 编译原理完整学习笔记(三):词法分析
  10. DevOps团队如何选择监控工具
  11. 智慧交通信号控制系统梗概
  12. 有道智云 php,调用有道智云API,自动翻译WORDPRESS标题为英文
  13. USBkey结合win7实现登陆验证
  14. 福州等保测评机构哪家好?
  15. 网页微博连接不上服务器,新浪微博网络出错加载不了怎么办
  16. 计算机的文件怎么加密码怎么设置,文件夹怎么设置密码,教您怎么设置
  17. 绘制confusion matrix的R实现
  18. 纽约科技行业十大高薪职位
  19. python安装包提示error: option --single-version-externally-managed not recognized
  20. 4键电子手表说明书_迪士尼手表四键说明书

热门文章

  1. 移动Web开发图片自适应两种常见情况解决方案
  2. (android硬件应用实战)摄像头拍照实现和总结
  3. Ollydbg 常用快捷键
  4. 201671010456-张琼 实验二 词频统计软件项目报
  5. 3dContactPointAnnotationTool开发日志(二二)
  6. Vue.js——60分钟快速入门
  7. iOS设计模式 - 备忘录
  8. ZeroClipboard 和JqueryUI_dialog 完美组合!
  9. 文本信息检索基本知识【转】
  10. 一个高(3D/2D)动态表现的酷站