【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )
文章目录
- 前言
- 一、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 命令 )相关推荐
- 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )
文章目录 一.拷贝 Assets 目录下的 classes.dex 字节码文件到内置存储区 二.加载 DEX 文件并执行其中的方法 三.MainActivity 及执行结果 四.博客资源 一.拷贝 A ...
- java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)
java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...
- 在命令行下执行php程序
问题 安装phpredis扩展,在PHP.ini中添加extension=redis.so后,编写Redis.php文件 <code class="language-php hljs ...
- 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备 DEX 字节码文件 )
文章目录 一.DexClassLoader 构造函数简介 二.准备 DEX 文件 一.DexClassLoader 构造函数简介 DexClassLoader 构造函数如下 : /*** 创建一个{@ ...
- linux用命令行来执行php程序
<?php $start = microtime(true); for($i=0 ; $i <10000 ; $i ++){// echo '正在执行第'.$i.'个操作! '.PHP_E ...
- 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )
文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...
- Java程序员必备基础:Java代码是怎么运行的?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:一个线程池 bug 引发的 GC 思考!个人原创+1博客:点击前往,查看更多 链接:https://segmen ...
- 打成jar包 在命令行下执行java工程
将java工程打成jar包,但第三方jar包并没有包含在包中,当在命令行中运行jar包时,出现类找不到的异常, 在网上看到解决办法是将第三方jar包放到JDK的扩展类文件夹中(%JAVA_HOME%/ ...
- pycharm中导出依赖包 在pycharm下边的Terminal打开命令行终端执行命令
pycharm中导出依赖包 1 在pycharm下边的Terminal打开命令行终端执行命令 D:\nlp\salary\aSalary>pip freeze > d:\nlp\salar ...
最新文章
- 570D Codeforces Round #316 (Div. 2) D(dfs序,时间戳,二分
- 使用CoreText实现图文混排
- android studio 手动安装gradle,Android Studio 如何安装Gradle?
- C# 发出异步的Get请求
- 在每趟长途的HTML5挑运之后
- 【数字图像处理】Canny边缘检测详解及编程实现
- R7-3 极坐标->直角坐标 (10 分)
- 不知该买哪儿的房?数据分析来为你解答哪儿的房值得买
- 编译原理完整学习笔记(三):词法分析
- DevOps团队如何选择监控工具
- 智慧交通信号控制系统梗概
- 有道智云 php,调用有道智云API,自动翻译WORDPRESS标题为英文
- USBkey结合win7实现登陆验证
- 福州等保测评机构哪家好?
- 网页微博连接不上服务器,新浪微博网络出错加载不了怎么办
- 计算机的文件怎么加密码怎么设置,文件夹怎么设置密码,教您怎么设置
- 绘制confusion matrix的R实现
- 纽约科技行业十大高薪职位
- python安装包提示error: option --single-version-externally-managed not recognized
- 4键电子手表说明书_迪士尼手表四键说明书