少し前
に 、異教の踊りや他の超常的な活動の助けを借りて、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で入手できます。
動作させるには、次のものが必要です。
- プロジェクトに応じてcom.android.support:multidexを追加します。
- defaultConfigでmultiDexを有効にする
- タスクcom.android.build.gradle.tasks.Dexには、パラメーター--core-libraryを追加して、名前空間javaxのクラスによるエラーを回避します。
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を使用してください。ただし、あなた自身の危険とリスクがあります。