Скомпилируйте общую математику Apache для iOS или альтернатив

Я пытаюсь скомпилировать Apache Math для iOS.

Я использую этот форк: https://github.com/j2objc-contrib/j2objc-common-libs-e2e-test

Эта библиотека использует версию J2Objc: 0.9.8, и плагин J2Objc-Graddle также устарел и выдает ошибку, связанную с ARC. После Google я обнаружил, что обновление до версии J2Objc до 1.0.1 это исправит, и я обновил версию. Файлы компилируются успешно, но на этапе архивирования происходит сбой с ошибкой: архиватор статической библиотеки завершился неудачно при архивировании liborg.apache.commons-commons-math3-j2objc.a

Я следовал за шагами отсюда: http://dabugger.blogspot.com/2015/03/java-to-objective-c-journey.html

Вот подробные журналы: https://gist.github.com/iducool/ef1531302171c1e59fe988ce5e20d37b

Было бы очень полезно, если бы кто-нибудь сказал мне правильные или соответствующие шаги или указал на причину или решение этой проблемы. Я также рад услышать альтернативы этой библиотеки, если таковые имеются [я уже искал, но ничего не нашел].

Обновить:

Вместо плагина Graddle я начал использовать J2Objc, используя правила сборки XCode. Я скачал J2Objc, и есть пример "Hello", который может работать с простым файлом Jave. Я попробовал это, и это работает нормально.

Я добавил математическую библиотеку Apache в тот же проект (чтобы сэкономить время на настройку и возникновение ошибок) и обновил исходный путь в скрипте BuileRules. XCode рассматривает файлы Java и пытается скомпилировать это, но показывает ошибку пакета в этой библиотеке.

Получение так много ошибок, которые жалуются на пакет не найден. Вот один из примеров:

    error: /Users/myUser/Documents/j2objc-2.4/examples/Hello/Hello/java/org/apache/commons/math3/util/Precision.java:22: 
package org.apache.commons.math3.exception does not exist

Update-1

Используя команду ниже:

./j2objc  --build-closure -g -d ./gjava -sourcepath /Users/myUser/Downloads/commons-math3-3.6.1-src/src/main/java `find /Users/myUser/Downloads/commons-math3-3.6.1-src/src/main/java -name '*.java'`

Я могу генерировать классы Objective-C. Но эти классы дают ошибки почти во всех импорте, который имеет путь, как,

#include "org/apache/commons/math3/FieldElement.h"

Ошибка:

Файл 'org/apache/commons/math3/FieldElement.h' не найден

Все ошибки времени компиляции устранены. Попытка использовать классы и посмотреть, работает ли он. Я отправлю ответ через некоторое время.

2 ответа

Xcode не может обрабатывать правила, которые генерируют исходные файлы с относительными исходными каталогами. Хотя это старая школа, использование Make является, пожалуй, самым простым вариантом, поскольку j2objc/make имеет макросы, облегчающие его. Подпроект jsr305 - простая демонстрация этого.

Чтобы создать подпроект make в Xcode, создайте цель External Build System (в кросс-платформенном режиме) и вызовите make в ее аргументах Info. Примером сборки j2objc проекта JreEmulation является пример.

Есть несколько способов использовать J2Objc. Вот шаги, которые работали для меня,

  1. Загрузите дистрибутив J2OBJC отсюда: https://github.com/google/j2objc/releases [Обратите внимание, что версия для скачивания не является исходным кодом. Если вы загружаете исходный код, вам нужно сначала собрать J2OBJC]
  2. Откройте терминал. Переместился в загруженную папку J2Objc. Запустите следующую команду, изменив исходный путь и целевой путь,

    $j2objc --build-closure -g -d {DestinationPath} -sourcepath {SourcePath} `найти {SourcePath} -name '*.java'`

    {DestionatPath}: J2OBJC сгенерирует файл Java в этом каталоге.

    {SourcePath}: это должен быть путь к корневой папке, в которой присутствуют все файлы Java.

    Пример команды: $./ J2objc --build-closure -g -d ./generatedjava -sourcepath /Users/myUser/Downloads/commons-math3-3.6.1-src/src/main/java `find /Users/myUser/ Загрузки /commons-math3-3.6.1-src/src/main/java -name '*.java'`

    Эта команда получит все файлы Java из исходного пути и преобразует их в файл Java.

  3. Приведенная выше команда сгенерирует все файлы.h и.m в папке назначения в структуре org / apache / common. Итак, перетащите эту корневую папку "org" в ваш проект.

  4. Add Framework: откройте свой проект XCode. Выберите цель. Выберите вкладку "Общие". Перейти к Linked libraries and Framework раздел.

  5. Нажмите + кнопку. Выберите Добавить другое. Перейдите к пути {Папка, куда вы скачали J2Objc}/frameworks/JRE.framework и добавьте ее.

  6. Установите путь поиска заголовка и путь поиска фреймворка.

    HEADER_SEARCH_PATHS = "$ {J2OBJC_HOME} /frameworks/JRE.framework/Headers"; FRAMEWORK_SEARCH_PATHS = $ {SRCROOT} "$ {J2OBJC_HOME} / frameworks";

{J2OBJC_HOME}: путь, по которому вы скачали папку J2Objc.

Если все готово, попробуйте скомпилировать ваш проект.

Примечание. В последней версии предварительно скомпилированного J2Objc отсутствует поддержка архитектуры Armv7. Итак, если вы получаете ошибку, связанную с архитектурой, и хотите поддержать Armv7, то либо скомпилируйте J2Objc самостоятельно, либо загрузите J2Objc версии 2.2.

Другие вопросы по тегам