Чтение / анализ MS Project MPP Java Android 5.0+?
Алоха всем.
На Java есть проект MPXJ.org для импорта файлов проектов MS всех версий, но проблема в том, что для файлов.mpp выше, чем версия 2000-2003 .mpp, для файлов выше 2003, используется awt, java lib awt.Color (getColor), который не импортируется на Android, и все падает с
NoClassDefFoundError: Ошибка разрешения: Ljava/awt/Color;
вот основной код
MPPReader reader = new MPPReader();
String path2file = context.getFilesDir() + "/" +SAMPLE21_MPPX;
ProjectFile projectFile = reader.read(path2file); //<-- falling here
E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: главная
Процесс: com.example.bio.tj, PID: 13427
java.lang.NoClassDefFoundError: Ошибка разрешения: Ljava/awt/Color;
в net.sf.mpxj.mpp.MPPUtility.getColor(MPPUtility.java:543) и т. д.
и этот MPXJ также зависит от Apache POI, который обычно не импортирует в Android, тоже не подключается, я использовал эту сборку: https://github.com/centic9/poi-on-android
Есть решение для awt.Color, но здесь я не понимаю, что делать.
2 ответа
Вот пошаговое решение.
- открыть проект poi-on-android в андроид студии
- добавить в build.gradle (модуль: poishadow)
// после этого 2 строки
скомпилируйте 'org.apache.poi:poi-ooxml:3.17'
скомпилируйте 'com.fasterxml: aalto-xml: 1.0.0'
// добавляем эту строку с помощью mpxj gradle
группа компиляции: 'net.sf.mpxj', имя: 'mpxj', версия: '7.2.1'
- скомпилировать проект, получить файл \ poi-on-android-master \ poishadow \ build \ libs \ poishadow-all.jar
все это в одном apache poi и mpxj, после этого я взял этот файл и импортировал в свой проект, кажется, работает нормально для первого запуска (проверено в файле ms project 2010/2016), а onCreate в моем проекте я добавил
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
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");
Похоже, что версия POI для Android, на которую вы указали ссылку, уже решает эту проблему. Вот определение java.awt.Color
предоставлено poi-on-android
:
Надеюсь, вы либо сможете использовать этот источник непосредственно в своем проекте, либо забрать класс из poi-on-android
Сам JAR.