命令行指定类打包成dex文件

2019-04-26  本文已影响0人  小云边

命令行指定类打包成dex文件

  1. 编写java代码
  2. 编译成class
  3. 打包成jar
  4. dx命令生成对应的dex

编写java代码(D:\EnjoyFix\demo\src\main\java\com\demo\Test.java)

package com.demo;

import android.util.Log;

/**
 * Created by xmq on 2019/4/24.
 */
public class Test {
    private static String TAG = "Test";

    public void test(){
        Log.d(TAG, "测试");
    }
}

编译成class

  1. 使用命令编译javac

    javac D:\EnjoyFix\demo\src\main\java\com\demo\Test.java
    
    javac执行报错.png
    • 编码问题:

      • Linux下为UTF-8编码,javac编译gbk编码的java文件时,容易出现“错误:编码UTF-8的不可映射字符”

      • Windows下为GBK编码,javac编译utf-8编码的java文件时,容易出现“错误:编码GBK的不可映射字符”

      windows下编码问题解决方式:

      javac -encoding utf-8 D:\EnjoyFix\demo\src\main\java\com\demo\Test.java
      
    • 程序包不存在问题

      android.util不存在com.demo包名的路径下

  2. 使用Android Studio Build生成,build完成后在如下目录找到Test.class文件

    demo目录结构.png

打包成jar

jar cvf D:\test.jar D:\com\demo\Test.class

生成dex

生成了jar后,我们就可以采用命令来生成对应的dex了,我们采用dx命令来生成,这里命令主要在Android sdk下bulid-tools中的dx工具。

dx --dex --output D:\test.dex D:\test.jar
dex匹配错误.png

出现这个问题是打包生成jar的时候,直接复制了test.class文件到D盘,路径是test.class与Test.java里面的packagename不匹配,只需要把com包整个复制出来就ok了。然后使用jar cvf D:\test.jar D:\com\demo\Test.class命令就可以了。(下面也有另一种命令,完成.classs to .dex)

总结

这里只是演示如何分步打包得到dex文件,其实使用gradle命令更加简单方便。

tip:工程目录存放在命名中有空格的路径下面(如:Program Files),Program Files需要使用“ ”包裹,否则在读取class文件或者写入dex到该目录会失败。

direction name contain space.png

另外有命令直接由.class 生成 .dex文件,其中dx.jarD:\Program Files"\Android\Sdk\build-tools\28.0.3\lib下面,需要使用绝对路径

D:\EnjoyFix\demo\build\intermediates\classes\debug>java -jar "D:\Program Files"\Android\Sdk\build-tools\28.0.3\lib\dx.jar --dex --output=test.dex com\demo\Test.class
上一篇下一篇

猜你喜欢

热点阅读