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/ ...
随机推荐
- 在K8S中,Pod亲和性概念是什么?
在Kubernetes(简称K8S)中,Pod亲和性和反亲和性(Affinity and Anti-Affinity)是集群调度策略的重要组成部分,它们用于控制Pod如何与节点或其他Pod相对应地放置 ...
- 多路转接高性能IO服务器|select|poll|epoll|模型详细实现
前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014 ...
- Java 数字 默认是 Integer类型的问题,System.currentTimeMillis() + (180 * 24 * 60 * 60 * 1000)的问题,剖析、Long + Integer的问题
最终结论: (180 * 24 * 60 * 60) 这种计算表达式在 Java中是默认以 Integer类型来的,若不超过 Integer的最大值则没有问题,若超过则必须用 (180 * 24 * ...
- 如何使用ASP.NET Core 中的 Hangfire 实现作业调度
https://procodeguide.com/programming/hangfire-in-aspnet-core-schedule-jobs/ 如何使用ASP.NET Core 中的 Hang ...
- STC MCU的软件和硬件PCA/PWM输出
软件方式输出PWM PWM用于输出强度的控制, 例如灯的亮度, 轮子速度等, STC89/90系列没有硬件PWM, 需要使用代码模拟 使用纯循环的方式实现PWM 非中断的实现(SDCC环境编译) #i ...
- Js实现链表操作
Js实现链表操作 JavaScript实现链表主要操作,包括创建链表.遍历链表.获取链表长度.获取第i个元素值.获取倒数第i个元素值.插入节点.删除节点.有序链表合并.有序链表交集. 创建链表 cla ...
- Vue+ElementUI实现用户管理前后分离实战一:前端篇
项目介绍 前几天有老铁问我能不能写一个Vue+ElementUI+SpringBoot后端的前后分离项目,最近有点忙,但今天他还是来了!希望对大家能有点帮助,大家还想要点啥也可以加我QQ或给我留言 : ...
- Java Swing实现五子棋程序
首先感谢08年MLDN出的这个培训视频,我把代码和文档整理了一下,发布出来给需要学习Swing的朋友. 源码地址: https://gitee.com/indexman/gobang 一.知识点准备: ...
- RunnerGo低代码测试体验
RunnerGo是基于go语言自研的一款企业级全栈式测试平台,采用Apache-2.0 license开源协议,涵盖接口测试.性能测试.UI测试和项目管理等功能,并独创"拖拉拽"的 ...
- 编译 windows 上的 qt 静态库
记录命令行编译过程: 针对 Qt 5.15.2 版本, 只需要 Source 文件就行 打开 x86 Native Tools Command Prompt for VS 2019,如果需要编译 x6 ...