通过终端命令生成并在手机上运行dex文件

在Mac环境下配置dx终端指令

1、打开终端,进入HOME目录

cd $HOME

2、更新.bash_profile文件

touch .bash_profile

3、打开.bash_profile文件

open -e .bash_profile

4、加入dx文件所在路径,android sdk自带dx

export PATH=${PATH}:~/Library/Android/sdk/build-tools/29.0.3

5、保存并关闭.bash_profile文件
6、重启终端
7、验证配置结果

dx --version

8、结果

dx version 1.16

使用终端命令在Android中执行dex文件

0、创建Java源文件

public class HelloWorld {
    public static void main(String[] args) {
        print("Hello World!");
    }

    public static void print(String msg) {
        System.out.println(msg);
    }
}

1、编译Java源文件生成class文件

javac HelloWorld.java

2、编译class文件生成dex文件

dx --dex --output=HelloWorld.dex HelloWorld.class

使用Hex Fiend打开可以查看dex文件:

HelloWorld-dex.png

3、进入手机系统

adb shell

创建dex存储目录

generic_x86:/ $ mkdir /data/local/tmp/dalvik-cache
generic_x86:/ $ export ANDROID_DATA=/data/local/tmp
generic_x86:/ $ exit 

4、将dex文件放进手机的dex存储目录

adb push HelloWorld.dex /data/local/tmp/dalvik-cache/

5、执行dex文件

adb shell dalvikvm -cp /data/local/tmp/dalvik-cache/HelloWorld.dex HelloWorld

6、输出结果

Hello World!

dex文件格式概览

dex文件格式主要组成:

名称 格式 说明
header header_item 标头
string_ids string_id_item[] 字符串标识符列表
type_ids type_id_item[] 类型标识符列表
proto_ids proto_id_item[] 方法原型标识符列表
field_ids field_id_item[] 字段标识符列表
method_ids method_id_item[] 方法标识符列表
class_defs class_def_item[] 类定义列表
call_site_ids call_site_id_item[] 调用点标识符列表
method_handles method_handle_item[] 方法句柄列表
data ubyte[] 数据区
link_data ubyte[] 静态链接文件中使用的数据

dex文件格式实例图解析:

欢迎关注Android技术堆栈,专注于Android技术学习的公众号,致力于提高Android开发者们的专业技能!

qrcode_for_gh_11a43c85bc22_430.jpg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,712评论 0 5
  • Dex文件解析 Android5.0以上开始使用ART虚拟机,在此之前我们一直使用的Dalvik虚拟机,那么为什么...
    一虎杀俩羊阅读 1,212评论 0 1
  • 什么是dex文件 他是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。 由于dalvik...
    SmileUsers阅读 34,786评论 3 53
  • 什么是dex文件 他是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。 由于dalvik...
    _枫_阅读 3,025评论 0 2
  • 【非好文,写的不对之处欢迎指正。】 写在前面: 可能是执念在作怪,一直想要自己手写一个AIDL,翻阅网络上很多资料...
    路人丁Coco阅读 810评论 1 0

友情链接更多精彩内容