@jack7277

Чтение MS Project MPP/MPX под Андроид 5+?

Всем бобра.

Есть проект MPXJ на яве по импорту всех проектных файлов всех версий, но беда в том, что для .mpp файлов старше версии хз какой, называется 2000-2003 .mpp, для файлов старше применяется awt.Color, которого нет в окружении андроида и всё падает с NoClassDefFoundError: Failed resolution of: Ljava/awt/Color;

MPPReader reader = new MPPReader();
String path2file = context.getFilesDir() + "/" +SAMPLE21_MPPX;
ProjectFile projectFile = reader.read(path2file); <-- тута мы падаем


E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bio.tj, PID: 13427
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/awt/Color;
at net.sf.mpxj.mpp.MPPUtility.getColor(MPPUtility.java:543) итд

причем эта MPXJ также зависит от Apache POI, которого штатно под андроид тоже не подключишь, я использовал эту сборку: https://github.com/centic9/poi-on-android

там же есть решение по awt/Color, но вот тут я не понимаю уже что делать, нужно включить shadowJar и подключить теневой jar, который подменит собой вызываемый и хз чего делать в итоге, сделал два jar файла, подключил их себе, что дальше непонятно.

Короче, Бен, это Данила, ай нид хелп.
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
@jack7277 Автор вопроса
Решение оказалось простым,
- открыть проект в студии https://github.com/centic9/poi-on-android
- добавить к строкам build.gradle (Module: poishadow)

compile 'org.apache.poi:poi-ooxml:3.17'
compile 'com.fasterxml:aalto-xml:1.0.0'
строку подключающую MPXJ
// https://mvnrepository.com/artifact/net.sf.mpxj/mpxj
compile group: 'net.sf.mpxj', name: 'mpxj', version: '7.2.1'

- затем при компиляции проекта будет создан файл \poi-on-android-master\poishadow\build\libs\poishadow-all.jar

и на этапе каком-то всё зависнет, но файл можно брать и подключать к себе в проект, уже не шаманя с тенями ничего не делая, а еще у себя в проекте в 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");
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы