使用最新android sdk 将jar文件编译成dex

news2025/1/23 13:17:37

最近需要一些比较骚的操作,所以需要将gson编译成dex。

因为手上有jar包,所以就拿出了android sdk准备一把入魂,结果报错不断,让人无奈。只好根据报错来调整编译步骤,不得不为安卓环境更新Debug。

1、dx变d8

并不确定安卓更名的原因,但找到这个只是根据名字前面有个相同的d,这对于不太熟悉更新的人来说,只能靠蒙。

并不确定从哪个版本开始,dx.bat更新成了d8.bat。而且在使用中,命令方式也发生了变化,这个后面再讲。

所以,原来的dx --dex --output xxx.dex xxx.jar命令,不能使用了。

2、jre环境报错。

日常使用java的人,我觉得大多数人还是使用1.8。

不过随着各种软件,及编译环境的更新,java1.8的问题慢慢出现了,也出现了各种不兼容的情况。

只是到目前为止,还没有更新的动力。

这次编译,报错了:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/android/tools/r8/D8 has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

报错就是说java1.8太老了,带不动了。

所以,切换java版本,运行了,继续报错。

3、命令换了

C:\Users\Administrator\Desktop\gson>d8
Exception in thread "main" java.lang.RuntimeException: Invalid invocation.
Usage: d8 [options] [@<argfile>] <input-files>
 where <input-files> are any combination of dex, class, zip, jar, or apk files
 and each <argfile> is a file containing additional arguments (one per line)
 and options are:
  --debug                 # Compile with debugging information (default).
  --release               # Compile without debugging information.
  --output <file>         # Output result in <file>.
                          # <file> must be an existing directory or a zip file.
  --lib <file|jdk-home>   # Add <file|jdk-home> as a library resource.
  --classpath <file>      # Add <file> as a classpath resource.
  --min-api <number>      # Minimum Android API level compatibility (default: 1).
  --pg-map <file>         # Use <file> as a mapping file for distribution.
  --intermediate          # Compile an intermediate result intended for later
                          # merging.
  --file-per-class        # Produce a separate dex file per class.
                          # Synthetic classes are in their own file.
  --file-per-class-file   # Produce a separate dex file per input .class file.
                          # Synthetic classes are with their originating class.
  --no-desugaring         # Force disable desugaring.
  --desugared-lib <file>  # Specify desugared library configuration.
                          # <file> is a desugared library configuration (json).
  --desugared-lib-pg-conf-output <file>
                          # Output the Proguard configuration for L8 to <file>.
  --main-dex-rules <file> # Proguard keep rules for classes to place in the
                          # primary dex file.
  --main-dex-list <file>  # List of classes to place in the primary dex file.
  --main-dex-list-output <file>
                          # Output resulting main dex list in <file>.
  --force-enable-assertions[:[<class name>|<package name>...]]
  --force-ea[:[<class name>|<package name>...]]
                          # Forcefully enable javac generated assertion code.
  --force-disable-assertions[:[<class name>|<package name>...]]
  --force-da[:[<class name>|<package name>...]]
                          # Forcefully disable javac generated assertion code.
                          # This is the default handling of javac assertion code
                          # when generating DEX file format.
  --force-passthrough-assertions[:[<class name>|<package name>...]]
  --force-pa[:[<class name>|<package name>...]]
                          # Don't change javac generated assertion code. This
                          # is the default handling of javac assertion code when
                          # generating class file format.
  --force-assertions-handler:<handler method>[:[<class name>|<package name>...]]
  --force-ah:<handler method>[:[<class name>|<package name>...]]
                          # Change javac and kotlinc generated assertion code
                          # to invoke the method <handler method> with each
                          # assertion error instead of throwing it.
                          # The <handler method> is specified as a class name
                          # followed by a dot and the method name.
                          # The handler method must take a single argument of
                          # type java.lang.Throwable and have return type void.
  --thread-count <number> # Use <number> of threads for compilation.
                          # If not specified the number will be based on
                          # heuristics taking the number of cores into account.
  --map-diagnostics[:<type>] <from-level> <to-level>
                          # Map diagnostics of <type> (default any) reported as
                          # <from-level> to <to-level> where <from-level> and
                          # <to-level> are one of 'info', 'warning', or 'error'
                          # and the optional <type> is either the simple or
                          # fully qualified Java type name of a diagnostic.
                          # If <type> is unspecified, all diagnostics at
                          # <from-level> will be mapped.
                          # Note that fatal compiler errors cannot be mapped.
  --android-platform-build
                          # Compile as a platform build where the runtime/bootclasspath
                          # is assumed to be the version specified by --min-api.
  --art-profile <input> <output>
                          # Rewrite human readable ART profile read from <input> and write to <output>.
  --startup-profile <file>
                          # Startup profile <file> to use for dex layout.
  --version               # Print the version of d8.
  --help                  # Print this message.

最显著的变化有两个:

1、不再需要 --dex 命令

2、不能直接转化成.dex文件,需要zip或者jar后缀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/996296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

postgresql-通用表达式

postgresql-通用表达式 入门案例简单CTE递归 CTE案例1案例2 入门案例 -- 通用表达式 with t(n) as (select 2) select * from t;简单CTE WITH cte_name (col1, col2, ...) AS (cte_query_definition ) sql_statement;WITH 表示定义 CTE&#xff0c;因此 CTE 也称为 WITH 查询…

Pandas中at、iat函数详解

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 at 函数&#xff1a;通过行名和列名来取值&#xff08;取行名为a, 列名为A的值&#xff09; iat 函数&#xff1a;通过行号和列号来取值&#xff08;取第1行&#xff0c;第1列的值&#xff09; 本文给出at、iat常见的…

Mybatis-Plus-入门简介(2)

Mybatis-Plus-入门简介 1.简介 Mybatis-Plus官网&#xff1a;https://baomidou.com/ Mybatis-Plus仓库地址&#xff1a;https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter 仓库地址&#xff1a;仓库地址&#xff1a;https://gitee.com/long-xiaozhe…

932. 漂亮数组

932. 漂亮数组 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 932. 漂亮数组 https://leetcode.cn/problems/beautiful-array/description/ 完成情况&#xff1a; 解题思路&#xff1a; nums 是由范围 [1, n] 的…

智慧公厕破解公共厕所管理的“孤岛现象”

在现代社会中&#xff0c;公共厕所是城市管理中的一项重要任务。然而&#xff0c;经常会出现公厕管理的“孤岛现象”&#xff0c;即每个公厕都是独立运作&#xff0c;缺乏统一的管理和监控机制。针对这一问题&#xff0c;智慧公厕的出现为解决公共厕所管理难题带来了新的方案。…

无涯教程-JavaScript - COUPNUM函数

描述 COUPNUM函数返回结算日和到期日之间应付的息票数量,四舍五入到最接近的整数。 语法 COUPNUM (settlement, maturity, frequency, [basis])争论 Argument描述Required/OptionalSettlement 证券的结算日期。 证券结算日期是指在发行日期之后将证券交易给买方的日期。 Re…

Co-SLAM——论文解析

Co-SLAM: Joint Coordinate and Sparse Parametric Encodings for Neural Real-Time SLAM 神经隐式表征slam&#xff08;implict neural representaton&#xff0c;INR&#xff09;使用一个连续函数来表征图像或者三维voxel&#xff0c;并用神经网络来逼近这个函数。Co-SLAM 也…

MyBatis-Plus-扩展操作(3)

3.扩展 代码生成 逻辑删除 枚举处理器 json处理器 配置加密 分页插件 3.1 代码生成 https://blog.csdn.net/weixin_41957626/article/details/132651552 下载下面的插件 红色的是刚刚生成的。 我觉得不如官方的那个好用&#xff0c;唯一的好处就是勾选的选项能够看的懂得。…

架构图怎么制作?分享5个实用方法!

面对复杂的系统、应用程序或项目&#xff0c;绘制架构图是一种关键的手段&#xff0c;帮助我们清晰地展示各个组件、关系和交互。本文将带你深入了解几种常见的制作架构图的方法&#xff0c;一起看下去吧。 1 手绘和扫描 对于简单的概念&#xff0c;你可以手绘架构图&#…

自考本科,毕业八年,2023浙大MPA提面优秀分享

去年十月中旬&#xff0c;我参加了浙江大学MPA提前批面试。结果出乎意料地&#xff0c;我竟然获得了A资格。对此&#xff0c;我自己也感到难以置信。事实上&#xff0c;我只是抱着试一试的心态递交了申请材料。因为通过我对前几年浙大自划线的情况来看&#xff0c;对于浙江大学…

OSPF协议:优点、初始化流程和管理

文章目录 一、RIP的缺陷二、定义三、OSPF初始化流程1. 建立邻居和邻接关系2. 邻接路由器之间交换链路状态信息&#xff0c;实现区域内链路状态数据库同步3. 每台路由器根据本机链路状态数据库&#xff0c;计算到达每个目的网段的最优路由&#xff0c;写入路由表 四、OSPF分区域…

自媒体MCN公司选择企业云盘:哪个更适合?

自媒体MCN公司用什么企业云盘好&#xff1f;Zoho WorkDive企业网盘助力内容创作与MCN公司进行文件储存与管理。 一、MCN公司业务背景 A公司是一家处于蓬勃发展的MCN(多频道网络)机构&#xff0c;其业务范围广泛且多元化。A公司为文化娱乐行业提供经纪人服务&#xff0c;帮助艺人…

软考备考-程序员-备考笔记

软考备考-程序员-备考笔记 持续更新中》》》》》 更新日志&#xff1a; 刷题软件&#xff1a; 希赛网&#xff1a;每日一练和往年真题是免费的 软考通&#xff1a;完全免费 软考真题&#xff1a;完全免费 51CTO题库:微信小程序&#xff0c;不用下载&#xff0c;顺手 试卷题…

Java集合大总结——Map集合

Map集合框架 1、Map集合框架1.1 关于Map接口中的主要实现类1.2 各实现类的特点&#xff1a; 2. HashMap 和 Hashtable 的区别3. HashMap 和 HashSet 区别4. HashMap 和 TreeMap 区别 1、Map集合框架 注意&#xff1a;Map接口是在java.util.Map 的包下&#xff0c;Map 接口不是…

深度学习面试八股文(2023.9.06)

一、优化器 1、SGD是什么&#xff1f; 批梯度下降&#xff08;Batch gradient descent&#xff09;&#xff1a;遍历全部数据集算一次损失函数&#xff0c;计算量开销大&#xff0c;计算速度慢&#xff0c;不支持在线学习。随机梯度下降&#xff08;Stochastic gradient desc…

知识库搭建最简单的方法:登录、创建、优化,就这三步!

实际应用中&#xff0c;企业所需要的知识库场景不止一个&#xff0c;更多是很多场景的复合模式&#xff0c;甚至还需要不同团队间的协作配合&#xff0c;这个时候就还需要去考虑不同部门/团队间的业务拉通。 搭建知识库 所以当我们搭建知识库的时候&#xff0c;不仅要掌握基础…

【每天一道算法题】day2-认识时间复杂度

认识时间复杂度&#xff1a; O&#xff1a;读作big O&#xff0c;在数学上指的是上限的意思 常数时间的操作 一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作&#xff0c;叫做常数操作。时间复杂度为一个算法流程中&#xff0c;常数操作数量的一…

docker系列(1) - docker环境篇

文章目录 1. docker环境1.1 docker安装1.2 阿里云镜像加速器1.2 docker管理工具(portainer)1.3 docker网络1.3.1 网络说明1.3.2 创建指定网关的网络 1. docker环境 1.1 docker安装 #CentOS 6 rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noar…

windows10系统-14-VirtualBox中的设置

VirtualBox 常用设置说明 Ubuntu-server18.04.2LTS安装VirtualBox增强功能 VirtualBox官网 使用VirtualBox一步一步安装Ubuntu 22.04 ubuntu server官网安装教程 1 新建虚拟机 (1)点击新建&#xff0c;在新建虚拟电脑对话框填入虚拟电脑的名称&#xff0c;保存的位置。推荐保…

代码随想录第41天| 343.整数拆分,96.不同的二叉搜索树

343.整数拆分 这道题全程懵逼 343. 整数拆分 class Solution {public int integerBreak(int n) {//推论一&#xff1a; 若拆分的数量 a 确定&#xff0c; 则 各拆分数字相等时 &#xff0c;乘积最大。//推论二&#xff1a; 将数字 n尽可能以因子 3等分时&#xff0c;乘积最大…