Скомпилируйте общую математику Apache для iOS или альтернатив - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь скомпилировать 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 и пытается скомпилировать это, но показывает ошибку пакета в этой библиотеке.

Source code directory structure

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

    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 ]

1 голос
/ 23 июня 2019

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

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

0 голосов
/ 06 июля 2019

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

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

    $ j2objc --build-closure -g -d {DestinationPath} -sourcepath {SourcePath} `find {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/Downloads/commons-math3-3.6.1-src/src/main/java -name '* .java'`

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

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

  4. Добавить 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.

...