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了(从根源解决问题 😂)