原文: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. centos环境下MySQL8.0.25离线升级至8.0.32

    环境 centos7 mysql8.0.25 下载新版本mysql 下载地址:https://dev.mysql.com/downloads/mysql/ 升级 备份数据 先保存原始数据,进入mysq ...

  2. 利用 ASP.NET Core 开发单机应用

    前言 现在是分布式微服务开发的时代,除了小工具和游戏之类刚需本地运行的程序已经很少见到纯单机应用.现在流行的Web应用由于物理隔离天然形成了分布式架构,核心业务由服务器运行,边缘业务由客户端运行.对于 ...

  3. HarmonyOS 开发入门(一)

    HarmonyOS 开发入门(一) 日常逼逼叨 因为本人之前做过一些Android相关的程序开发,对移动端的开发兴趣比较浓厚,近期也了解到了一些关于华为HarmonyOS 4.0 的事件热点,结合黑马 ...

  4. OpenGL的深度缓冲

      如果我们想要在三维空间里画两个正方形:一个红色的,一个绿色的,而且从人眼的观察角度看,绿色正方形在红色正方形的后面,最后看上去应该是这样的: 要点在于,从观察者的角度看,绿色正方形在红色正方形的后 ...

  5. IntelliJ IDEA 在电脑上安装多个JDK 切换的方法

    在电脑上来回切换多个版本的JDK进行开发,方法很简单: 1.下载jdk 下载的时候不要下载安装包,而是下载zip包,这样直接解压就可,不污染注册表,难引起其他问题 2.解压后 把JDK配置到IDEA里 ...

  6. CF1842

    A 比两边和的大小即可. B 显然如果一个数拥有的所有二进制位的 \(1\) 被包含在 \(x\) 中,选了一定不会导致不能变成 \(x\):如果有一个 \(1\),\(x\) 对应的位上是 \(0\ ...

  7. Power BI 12 DAY

    电商平台流量分析 案例练习 参数建模 建模-->新建参数 新建度量值使用SWITCH函数将需要的指标数据化 15.关键指标 = switch([指标选择 值],1,[1.访客数合计],2,[2. ...

  8. NC20313 [SDOI2008]仪仗队

    题目链接 题目 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练. 仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队 ...

  9. NC16615 [NOIP2008]传纸条

    题目链接 题目 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接 ...

  10. Python中`yield`关键字详解

    Python中`yield`关键字有什么用? Python中yield关键字有什么用? 它能做什么? 例如,我试图理解这段代码1: def _get_child_candidates(self, di ...