美文网首页
命令行指定类打包成dex文件

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

作者: 星权 | 来源:发表于2019-04-26 17:44 被阅读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
    

    相关文章

      网友评论

          本文标题:命令行指定类打包成dex文件

          本文链接:https://www.haomeiwen.com/subject/cppqnqtx.html