命令行指定类打包成dex文件
- 编写java代码
- 编译成class
- 打包成jar
- 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
-
使用命令编译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包名的路径下
-
-
使用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.jar
在D:\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