• Stars
    star
    346
  • Rank 122,430 (Top 3 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 8 years ago
  • Updated 3 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,754
star
2

generate-and-send-ssh-key

Script to automate the setup of ssh-public/private-key authentication to avoid some common pitfalls
Shell
195
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
128
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
61
star
5

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
34
star
6

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
7

JGitFS

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

commons-dost

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

actions

Repository of reusable Github workflows
4
star
10

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
4
star
11

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
12

poi-fuzz

Use Jazzer to perform fuzzy testing of Apache POI
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-test

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

antlr-fuzz

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

file-type-detection

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

gwt-gradle-example-issue81

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

debhelper-ppa

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

git-ftp-ppa

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

commons-htmlunit

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

kphotoalbum-ppa

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

codec-fuzz

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

gpx2route

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

qrencode-ppa

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

dynahist-fuzz

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

kdesvn-ppa

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

scribus-ppa

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

tpm2-tss-ppa

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

ocserv-ppa

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

onedrive-ppa

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

tellico-ppa

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

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
38

pacpl-ppa

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

hash4j-fuzz

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

mtools-ppa

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

compress-fuzz

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

pkg-kde-tools.ppa

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

konsole-ppa

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

firehol-ppa

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

MultiplicativeDigitalRoot

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

tob-ppa

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

jacococoveragecolumn-plugin

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

dpkg-ppa

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

poi-regression-test

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

mp3splt-gtk-ppa

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

.github

Default community health files
1
star
52

ntp-ppa

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

csv-fuzz

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

laminar-ppa

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

openconnect-ppa

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

imaging-fuzz

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

mp3gain-ppa

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

pipewire-ppa

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

simple-scan-ppa

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

libmp3splt-ppa

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

subversion-ppa

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

digikam-ppa

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

glabels-ppa

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

mp3splt-ppa

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

poi-benchmark

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

subversion-19-ppa

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

git-ppa

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

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
69

file-leak-postprocess

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

BenfordsLaw

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

tika-fuzz

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

bless-ppa

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

soundkonverter-ppa

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

configuration-fuzz

Use Jazzer to perform fuzzy testing of Apache Commons Configuration
Java
1
star
75

cover-the-world

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