Android使用poi遇到的问题
关于Poi使用可以看这一篇【开源库推荐】#4 Poi-办公文档处理库
本篇主要讲些在Android上使用出现的问题
问题
原本是需要一个导出xlsx表格文件的功能,debug测试可以用,但是编译打包apk就报错了
结论
由于Poi里大量使用到了反射,所有使用Poi导出xlsx表格文件编译打包出错,最终解决方法就是直接改需求了...
于是就将功能改为导出xls (从根源解决了问题 )
依赖:
implementation 'org.apache.poi:poi:3.9'
混淆规则:
# poi
-keep class org.apache.xmlbeans.** { *;}
-keep class org.apache.poi.** { *;}
-keep class org.openxmlformats.** { *;}
-keep class com.microsoft.schemas.** { *;}
-keep class javax.xml.stream.** { *;}
补充 - 表格读写库推荐(除了poi,其他几个没研究过):
Apache POI:Apache POI是Java编程语言的开源库,提供了一组API来创建、读取和修改Microsoft Office格式的文档,包括Excel文件。
JExcelApi:JExcelApi是Java编程语言的开源库,用于读取和写入Microsoft Excel格式的电子表格。
EasyXLS:EasyXLS是一个跨平台的Java库,用于读取、写入和操作Microsoft Excel XLSX、XLS和CSV格式的文件。
OpenXLS:OpenXLS是一个用于读取、写入和操作Microsoft Excel XLS格式的Java库。
连接:
Apache POI: https://github.com/apache/poi
JExcelApi: https://github.com/andykhan/jexcelapi
EasyXLS: https://github.com/EasyXLS/EasyXLS
OpenXLS: https://github.com/openxls/openxls
排查过程
//表格文件创建的依赖
def poiVersion = "4.1.0"
implementation "org.apache.poi:poi:${poiVersion}"
implementation "org.apache.poi:poi-ooxml:${poiVersion}"
implementation 'javax.xml.stream:stax-api:1.0'
上面的使用到时没有什么问题,但却是在打包的时候提示了一个错误
com.android.tools.r8.internal.m1: MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O (--min-api 26)
解决方法到时很简单,就是让你的APP最低支持26版本即可,去改minSdkVersion
但显然不是我想要的效果,于是就继续降级,然后根据chatGpt的提示,降级到了3.9版本,顺利的解决了问题,不过也需要稍微调整下代码,因为有些api不支持
下面列出可用的依赖:
implementation 'org.apache.poi:poi:3.9'
implementation 'org.apache.poi:poi-ooxml:3.9'
// XML 和 MIME 类型的处理
implementation 'javax.activation:activation:1.1.1'
最后因为导出xlsx使用到的poi-ooxml库里的混淆出现问题,搜索答案半天无解,于是就将功能切换为导出xls了(从根源解决问题 )
Android使用poi遇到的问题的更多相关文章
- android使用POI读写word doc文件
目录 1 读word doc文件 1.1 通过WordExtractor读文件 1.2 通过HWPFDocument读文件 2 写word doc文件 Apache p ...
- 【Android】3.15 短串分享功能
分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 短串分享是指,用户搜索查询后得到的每一个地理位置结果将会对应一条短串(短链接),用户可以通过短信.邮 ...
- FragmentTabHost的基本用法
开通博客以来已经约莫1个月了.几次想提笔写写东西,但总是由于各种各样的原因并没有开始.现在,年假刚结束,项目也还没有开始,但最终促使我写这篇博客的是,看了一篇博友写的新年计划,说是要在新的一年中写50 ...
- Android中使用POI加载与显示word文档
最近打算实现一个功能:在Android中加载显示Word文档,当然这里不是使用外部程序打开.查看一些资料后,打算采用poi实现,确定了以下实现思路: 将ftp中的word文档下载到本地. 调用poi将 ...
- 百度——LBS.云 v2.0——云存储的POI创建和删除--Android 源码
如有疑问请联系:QQ936467727 需要注意的几点问题: 1.密钥是http://lbsyun.baidu.com/apiconsole/key申请的,密钥类型是浏览器端 2.geotable_i ...
- [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索
一个. 百度地图城市位置和POI搜索知识 上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...
- Android必知必会-带列表的地图POI周边搜索
如果移动端访问不佳,请尝试–> Github版 2016-08-22 更新 注意:在 Activity 代码中的onPoiSearched(PoiResult result, int rCode ...
- Error: Default interface methods are only supported starting with Android N (--min-api 24): java.io.InputStream org.apache.poi.sl.usermodel.ObjectShape.readObjectData()
项目运行的时候,如果报错 Error: Default interface methods are only supported starting with Android N (--min-api ...
- 【Android】3.12 兴趣点( POI)搜索功能
分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 POI(Point of Interest),中文可以翻译为“兴趣点”.在地理信息系统中,一个POI ...
- Android应用中使用百度地图API之POI(三)
先看执行后的图吧: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/ ...
随机推荐
- Git企业开发控制理论和实操-从入门到深入(三)|分支管理
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...
- Java Calendar 多用,日期 加减
服务需要订购一个月,订购一个月 不等于增加 30天:若是1,3,5的话应该 31天,要善用 Calendar public static void main(String[] args) throws ...
- Linux-expect(以交互形式输入命令,实现交互通信)
1.expect简介 expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信. 安装命令: yum install ex ...
- Hive中insert into 和 insert overwrite的区别
相同点 insert into 和 insert overwrite 都是往表中插入数据的. 不同点 区别1: insert into :其实是将数据追加到表的末尾,注意:不是覆盖,是追加. inse ...
- offline 2 online | 重要性采样,把 offline + online 数据化为 on-policy samples
论文标题:Offline-to-Online Reinforcement Learning via Balanced Replay and Pessimistic Q-Ensemble CoRL 20 ...
- 好书推荐之《JAVA编程思想》
名人推荐 真是一本透着编程思想的书. 上面的书让你从微观角度了解 Java,而这本书则可以让你从一个宏观角度了解 Java. 这本书和 Java 核心技术的厚度差不多,但这本书的信息密度比较大. 所以 ...
- NC14291 Cut
题目链接 题目 题目描述 给你一个长度为 \(n\) 的序列,你每次可以将一个序列分割成两个连续的的子序列, 分割的代价为原序列的总和. 现在允许你在初始时将序列重新排列一次. 问分割成 \(n\) ...
- patch命令
patch命令 patch指令让用户利用设置修补文件的方式.修改.更新原始文件,倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行,如果配合修补文件的方式则能一次修补大批文件,这也是Linux系 ...
- 开年喜报!Walrus成功入选CNCF云原生全景图
近日,数澈软件 Seal (以下简称"Seal")旗下开源应用管理平台 Walrus 成功入选云原生计算基金会全景图(CNCF Landscape)并收录至 "App D ...
- 通过命令修改git提交的注释信息
1.修改最新一条 commit 注释信息 通过 git commit --amend 命令修改注释信息,然后:wq 进行保存,再重新提交 2. 修改多条 commit 注释信息 输入命令:git re ...