原文: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,其他几个没研究过):

  1. Apache POI:Apache POI是Java编程语言的开源库,提供了一组API来创建、读取和修改Microsoft Office格式的文档,包括Excel文件。

  2. JExcelApi:JExcelApi是Java编程语言的开源库,用于读取和写入Microsoft Excel格式的电子表格。

  3. EasyXLS:EasyXLS是一个跨平台的Java库,用于读取、写入和操作Microsoft Excel XLSX、XLS和CSV格式的文件。

  4. OpenXLS:OpenXLS是一个用于读取、写入和操作Microsoft Excel XLS格式的Java库。

连接:

  1. Apache POI: https://github.com/apache/poi

  2. JExcelApi: https://github.com/andykhan/jexcelapi

  3. EasyXLS: https://github.com/EasyXLS/EasyXLS

  4. 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遇到的问题的更多相关文章

  1. android使用POI读写word doc文件

    目录 1     读word doc文件 1.1     通过WordExtractor读文件 1.2     通过HWPFDocument读文件 2     写word doc文件 Apache p ...

  2. 【Android】3.15 短串分享功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 短串分享是指,用户搜索查询后得到的每一个地理位置结果将会对应一条短串(短链接),用户可以通过短信.邮 ...

  3. FragmentTabHost的基本用法

    开通博客以来已经约莫1个月了.几次想提笔写写东西,但总是由于各种各样的原因并没有开始.现在,年假刚结束,项目也还没有开始,但最终促使我写这篇博客的是,看了一篇博友写的新年计划,说是要在新的一年中写50 ...

  4. Android中使用POI加载与显示word文档

    最近打算实现一个功能:在Android中加载显示Word文档,当然这里不是使用外部程序打开.查看一些资料后,打算采用poi实现,确定了以下实现思路: 将ftp中的word文档下载到本地. 调用poi将 ...

  5. 百度——LBS.云 v2.0——云存储的POI创建和删除--Android 源码

    如有疑问请联系:QQ936467727 需要注意的几点问题: 1.密钥是http://lbsyun.baidu.com/apiconsole/key申请的,密钥类型是浏览器端 2.geotable_i ...

  6. [android] 百度地图开发 (两).所在地的城市定位和城市POI搜索

    一个. 百度地图城市位置和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了怎样申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述怎样定位城市位置.定 ...

  7. Android必知必会-带列表的地图POI周边搜索

    如果移动端访问不佳,请尝试–> Github版 2016-08-22 更新 注意:在 Activity 代码中的onPoiSearched(PoiResult result, int rCode ...

  8. 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 ...

  9. 【Android】3.12 兴趣点( POI)搜索功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 POI(Point of Interest),中文可以翻译为“兴趣点”.在地理信息系统中,一个POI ...

  10. Android应用中使用百度地图API之POI(三)

    先看执行后的图吧: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/ ...

随机推荐

  1. 在K8S中,Pod亲和性概念是什么?

    在Kubernetes(简称K8S)中,Pod亲和性和反亲和性(Affinity and Anti-Affinity)是集群调度策略的重要组成部分,它们用于控制Pod如何与节点或其他Pod相对应地放置 ...

  2. 多路转接高性能IO服务器|select|poll|epoll|模型详细实现

    前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014 ...

  3. Java 数字 默认是 Integer类型的问题,System.currentTimeMillis() + (180 * 24 * 60 * 60 * 1000)的问题,剖析、Long + Integer的问题

    最终结论: (180 * 24 * 60 * 60) 这种计算表达式在 Java中是默认以 Integer类型来的,若不超过 Integer的最大值则没有问题,若超过则必须用 (180 * 24 * ...

  4. 如何使用ASP.NET Core 中的 Hangfire 实现作业调度

    https://procodeguide.com/programming/hangfire-in-aspnet-core-schedule-jobs/ 如何使用ASP.NET Core 中的 Hang ...

  5. STC MCU的软件和硬件PCA/PWM输出

    软件方式输出PWM PWM用于输出强度的控制, 例如灯的亮度, 轮子速度等, STC89/90系列没有硬件PWM, 需要使用代码模拟 使用纯循环的方式实现PWM 非中断的实现(SDCC环境编译) #i ...

  6. Js实现链表操作

    Js实现链表操作 JavaScript实现链表主要操作,包括创建链表.遍历链表.获取链表长度.获取第i个元素值.获取倒数第i个元素值.插入节点.删除节点.有序链表合并.有序链表交集. 创建链表 cla ...

  7. Vue+ElementUI实现用户管理前后分离实战一:前端篇

    项目介绍 前几天有老铁问我能不能写一个Vue+ElementUI+SpringBoot后端的前后分离项目,最近有点忙,但今天他还是来了!希望对大家能有点帮助,大家还想要点啥也可以加我QQ或给我留言 : ...

  8. Java Swing实现五子棋程序

    首先感谢08年MLDN出的这个培训视频,我把代码和文档整理了一下,发布出来给需要学习Swing的朋友. 源码地址: https://gitee.com/indexman/gobang 一.知识点准备: ...

  9. RunnerGo低代码测试体验

    RunnerGo是基于go语言自研的一款企业级全栈式测试平台,采用Apache-2.0 license开源协议,涵盖接口测试.性能测试.UI测试和项目管理等功能,并独创"拖拉拽"的 ...

  10. 编译 windows 上的 qt 静态库

    记录命令行编译过程: 针对 Qt 5.15.2 版本, 只需要 Source 文件就行 打开 x86 Native Tools Command Prompt for VS 2019,如果需要编译 x6 ...