• Stars
    star
    321
  • Rank 126,056 (Top 3 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created almost 8 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A sample project that shows how Apache POI can be used in an Android application

Build Status Gradle Status Release GitHub release

This is a sample Android application to show how Apache POI can be used on Android.

It consists of two projects:

  • poishadow: A small helper project to produce a shaded jar-file for Apache POI which includes all necessary dependencies and fixes a few things that usually hinder you deploying Apache POI on Android
  • poitest: A very small sample Android application which performs some actions on XLSX-, PPTX and DOCX-files using Apache POI. See MainActivity for the actual code

Getting started

Necessary System-Properties

In order to work around problems with finding a suitable XML Parser, currently the following system properties need to be set manually during startup of your application (let me know if you know of a better way to do this, see issue #10)

System.setProperty("org.apache.poi.javax.xml.stream.XMLInputFactory", "com.fasterxml.aalto.stax.InputFactoryImpl");
System.setProperty("org.apache.poi.javax.xml.stream.XMLOutputFactory", "com.fasterxml.aalto.stax.OutputFactoryImpl");
System.setProperty("org.apache.poi.javax.xml.stream.XMLEventFactory", "com.fasterxml.aalto.stax.EventFactoryImpl");
Supported Android versions

The sample project uses minimum SDK version 26, which maps to Android 8.0. Higher versions should work as well, older ones are likely not supported any more.

Dependencies

Note: Some dependencies of Apache POI are not included in the shading to keep it's size at bay. If you use code areas which require curvesapi, commons-codec or any of the other dependencies, you may need to add them in your Android application in addition to the poishadow-all.jar file dependency.

Missing java.awt classes

Unfortunately Android does not provide any of the classes in package java.awt and thus any code which uses code from there will not work. This affects various places in Apache POI, e.g. when handling column-width, images or other graphical operations.

A few classes have been re-implemented in the src-folder in project poishadow. If you are missing some you might be able to add re-implementations for more there.

We do not plan to fix all of these in this sample application, if you need more, feel free to add it and send PRs if you think it is generally useful.

Use a pre-built jar

If you want to get started quickly, there is a ready-made jar-file available in the release section, however this is not updated frequently, so it may be somewhat outdated at times.

You should be able to simply add this to your Android project and use the Apache POI classes from it.

Build the jar yourself

If you would like to get the most recent jar or if you would like to change how the jar-file is built, e.g. if you need classes that are excluded, use a different version of POI or would like to adjust the build in some other way, you can build the shaded jar with the following steps:

Preparation:

You will need the following pieces in order to get started

Get the code:

git clone https://github.com/centic9/poi-on-android.git
cd poi-on-android

Configure where your Android SDK resides:

echo "sdk.dir=/opt/android-sdk-linux" > local.properties

Configure the version of the Android Build Tools that you have installed.

vi poitest/build.gradle

Then build the shadow-jar (for some reason this works better if executed separately):

./gradlew shadowJar

Finally run the build and some testing. Make sure you have a device connected, e.g. the Android emulator.

./gradlew build connectedCheck

For only the jar-files just run build

Support this project

If you find this tool useful and would like to support it, you can Sponsor the author

Run the Android emulator

List available emulators

<android-sdk>/tools/emulator -list-avds

Start an Android emulator

<android-sdk>/tools/emulator -avd <name>

Install the apk

<android-sdk>/platform-tools/adb install ./poitest/build/outputs/apk/poitest-debug.apk

Notes

  • You can use the resulting jar-file poishadow/build/libs/poishadow-all.jar in your own project, the code in directory poitest is just a small sample Android application to show that it works.
  • This was only tested in Android Studio with the Android emulator until now, should work on real Android as well, though!
  • Tested with targetSdkVersion 26 and minSdkVersion 26

Todo

  • Add more actual functionality to the sample application, currently it just performs some basic functionality on documents.
  • Some parts of the JDK are missing on Android, e.g. AWT-related classes. Some of these are missing when some functionality of Apache POI is used and thus currently crash the sample project. There are some libraries which provide these classes, but none was in a state that allowed it to easily integrate it here.

PR which improve on these items are welcome.

Links

Licensing

Copyright 2015-2024 Dominik Stadler

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

More Repositories

1

jgit-cookbook

Provides examples and code snippets for the JGit Java Git implementation
Java
1,713
star
2

generate-and-send-ssh-key

Script to automate the setup of ssh-public/private-key authentication to avoid some common pitfalls
Shell
187
star
3

headset-charge-indicator

A simple app-indicator for GNOME desktops to display the battery charge of some wireless headsets which also allows to control some functions like LEDs, sidetone and others.
Python
117
star
4

CommonCrawlDocumentDownload

A small tool which uses the CommonCrawl URL Index to download documents with certain file types or mime-types. This is used for mass-testing of frameworks like Apache POI and Apache Tika
Java
58
star
5

IntelliJ-Action-IDs

Create and publish a list of available ActionIDs for the IntelliJ plugin system by recursively searching through the jar-files and producing HTML via Jekyll
Java
32
star
6

poi-mail-merge

Small application which allows to repeatedely replace markers in a Microsoft Word document with items taken from a CSV/Microsoft Excel file to provide a simple mail-merge functionality
Java
31
star
7

JGitFS

JGitFS provides access to Git branches/tags/commits like they are separate directories via a Linux FUSE userland filesystem
Java
28
star
8

commons-dost

Utilitity library for stuff that I use in multiple projects
Java
6
star
9

actions

Repository of reusable Github workflows
4
star
10

commons-audio

A small library of code-pieces that I find useful when developing tools and applications around handling of audio, playing sound, downloading audio from certain websites
Java
4
star
11

poi-fuzz

Use Jazzer to perform fuzzy testing of Apache POI
Java
3
star
12

github-version-statistics

Uses the GitHub API to search for usages of a Java library and prepares some statistics about which versions are used how often
Java
3
star
13

cli-fuzz

Use Jazzer to perform fuzzy testing of Apache Commons CLI
Java
3
star
14

openambit-ppa

Openambit sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
2
star
15

config

Helper project which stores some config-files that I would like to have on every machine that I work on
Shell
2
star
16

unoconv-ppa

unoconv sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
Python
2
star
17

IntelliJ-Automation-Plugin

Plugin for IntelliJ IDE which provides a REST interface to automatically trigger actions in a running instance of IntelliJ IDE
Java
2
star
18

demo-fuzz

Minimal application for fuzzy-testing of Java code via the Jazzer fuzzer
Shell
2
star
19

commons-htmlunit

Common HtmlUnit utility methods that I find useful in various projects
Java
2
star
20

file-type-detection

A small tool to use Apache Tika to determine the mime-type of all files in a directory
Java
2
star
21

commons-test

Utilitity library for testing stuff that I use in multiple projects
Java
2
star
22

antlr-fuzz

Use Jazzer to perform fuzzy testing of antlr v4
Java
2
star
23

gwt-gradle-example-issue81

Reproducer for reported issue #81 in the gwt-gradle-plugin
Java
2
star
24

git-ftp-ppa

Git-ftp sources with Debian/Ubuntu packaging for building for PPA
Shell
2
star
25

cover-the-world

A tool which reads GPX tracks and produces a world-map which displays covered "tiles", i.e. ~1.5km squares
Java
2
star
26

kphotoalbum-ppa

KPhotoAlbum sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C++
1
star
27

kdesvn-ppa

Kdesvn sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C++
1
star
28

mp3splt-ppa

mp3splt sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
29

codec-fuzz

Use Jazzer to perform fuzzy testing of Apache Commons Codec
Java
1
star
30

gpx2route

Convert GPX files to route files suitable for upload to Suunto Ambit sports watches via Openambit
Java
1
star
31

qrencode-ppa

qrencode sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
Shell
1
star
32

dynahist-fuzz

Use Jazzer to perform fuzzy testing of dynahist
Java
1
star
33

scribus-ppa

Scribus sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C++
1
star
34

tpm2-tss-ppa

tpm2-tss sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
35

BenfordsLaw

Sample application showing Benford's Law by looking at file sizes on the local disk
Java
1
star
36

ocserv-ppa

ocserv sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
37

tellico-ppa

Tellico sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C++
1
star
38

onedrive-ppa

Onedrive sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
D
1
star
39

bzstats

Query the Apache bugzilla instance for bug-counts and use R to produce an SVG with a chart of how bug-counts evolved
Jupyter Notebook
1
star
40

pacpl-ppa

PACPL sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
Perl
1
star
41

pipewire-ppa

pipewire sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
42

hash4j-fuzz

Use Jazzer to perform fuzzy testing of hash4j
Java
1
star
43

mtools-ppa

Mtools sources with Debian/Ubuntu packaging for building for PPA with support for xz created using git-buildpackage
C
1
star
44

compress-fuzz

Use Jazzer to perform fuzzy testing of Apache Commons Compress
Java
1
star
45

pkg-kde-tools.ppa

pkg-kde-tools sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
1
star
46

konsole-ppa

konsole sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C++
1
star
47

firehol-ppa

firehol sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
Shell
1
star
48

MultiplicativeDigitalRoot

This project plays with the mathematical topics of "Multiplicative digital roots" and "Multiplicative Persistence"
Java
1
star
49

tob-ppa

Tob (tape oriented backup) sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
Shell
1
star
50

jacococoveragecolumn-plugin

Plugin for Jenkins to add a column for coverage results from the JaCoCo plugin
Java
1
star
51

dpkg-ppa

Dpkg sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
52

poi-regression-test

A tool to perform regression testing for Apache POI on a very large corpus of test-files
Java
1
star
53

subversion-ppa

Subversion sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
54

glabels-ppa

Glabels sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
55

mp3gain-ppa

mp3gain sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
56

laminar-ppa

Laminar sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C++
1
star
57

mp3splt-gtk-ppa

mp3splt-gtk sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
58

.github

Default community health files
1
star
59

ntp-ppa

ntp sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
60

csv-fuzz

Use Jazzer to perform fuzzy testing of Apache Commons CSV
Java
1
star
61

openconnect-ppa

openconnect sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
62

debhelper-ppa

Debhelper sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
Perl
1
star
63

simple-scan-ppa

simple-scan sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
Vala
1
star
64

imaging-fuzz

Use Jazzer to perform fuzzy testing of Apache Commons Imaging
Java
1
star
65

libmp3splt-ppa

libmp3splt sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
66

git-ppa

Git sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
67

digikam-ppa

Digikam sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C++
1
star
68

poi-benchmark

Some automated benchmarks of POI buildsystem and some POI functionality together with results
HTML
1
star
69

subversion-19-ppa

Subversion sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C
1
star
70

marble-qt4-ppa

Marble sources with Debian/Ubuntu packaging for building for PPA with support for Qt4 instead of Qt5 created using git-buildpackage
C++
1
star
71

file-leak-postprocess

A small tool to post-process output from running an application with file-leak-detector
Java
1
star
72

tika-fuzz

Use Jazzer to perform fuzzy testing of Apache Tika
Java
1
star
73

bless-ppa

Bless sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C#
1
star
74

soundkonverter-ppa

Soundkonverter sources with Debian/Ubuntu packaging for PPA created using git-buildpackage
C++
1
star