Apache POI XSSFを使用してAndroid 5(ART)でXLSXを読む

アンドロイド食べるポイ 少し前 、異教の踊りや他の超常的な活動の助けを借りて、Apache POI XSSFをAndroid 4で動作させる方法を書きました



これで、マルチデックスをサポートしたプロジェクトを作成するだけで十分で、ARTを搭載したデバイスですべてが機能します。 これはデバイスでのAhead-of-time(AOT)コンパイルによるものであり、マルチデックスは中間段階としてのみ必要であると考えています。



*残念ながら、すべてがそれほどスムーズではありません。 プロジェクトの依存関係にはxmlbeans-2.6.0.jarがあります。これはエラーが含まれており、重複するクラスが含まれています。 これにより、packageAllDebugClassesForMultiDexタスクのビルドが失敗し、次のエラーが発生します。

Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: duplicate entry: org/apache/xmlbeans/xml/stream/Location.class
      
      





XMLBeansを再パックする必要があります。

issues.apache.org/jira/browse/XMLBEANS-499が登録されているため、この欠陥は夕食時にすでに100年前のものですが、 まだ存在しています。



完全な作業を行うには、次のJARファイルが必要です。

poi-3.12-20150511.jar

poi-ooxml-3.12-20150511.jar

poi-ooxml-schemas-3.12-20150511.jar

stax-1.2.0.jar

stax-api-1.0.1.jar

xmlbeans-2.6.0.jar-このファイルのため、プロジェクトによっては不注意にPOIを追加することはできません



上記のファイルはすべて、POIダウンロードarchive.apache.org/dist/poi/release/binで入手できます。



動作させるには、次のものが必要です。





gradleを使用する場合、およそ次の内容の構成を受け取ります。

 apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { // ...    ... minSdkVersion 21 targetSdkVersion 21 multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } //  : packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' } project.tasks.withType(com.android.build.gradle.tasks.Dex) { additionalParameters=['--core-library'] //javax namespace fix } } dependencies { // ...    ... compile 'com.android.support:multidex:1.0.1' }
      
      







それだけです! おそらく、Android上に完全に機能するPOIが用意されました。前回のように、jarの内容をトリミングする必要がなかったため、他のすべてのopenxml形式を再び読み込むことができます。 結果を愛し、実験し、共有してください。

ご希望であれば、 javax-> aavax hackを作成することで困惑することもありますが、今回はこれが不要であることがわかりました。



依存関係を本当に拡張したい場合は、jar xmlbeansを再パックするmultidex.JarMergingTaskのルーチンを作成できます。このようなルーチンも作成しました。 ただし、その後、stax-apiのjavaxが原因でpreDexでビルドがクラッシュし始めました。 --core-libraryをpreDexに追加する簡単な方法を見つけることができず、それが私の忍耐の終わりでした。 プロジェクトのライブラリに再パッケージ化されたxmlbeansとともに、必要なすべてのjarを単純に追加することは、私にとって最も合理的なようです。



結論として:

必要なものがすべて含まれ、xmlbeansに重複が含まれていない2つのジャラを作成しました。ファイルはこのリポジトリにダウンロードできます。

健康に関してはgithub.com/andruhon/android5xlsxを使用してください。ただし、あなた自身の危険とリスクがあります。



All Articles