Скомпилируйте общую математику 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. Вот шаги, которые работали для меня,
- Загрузите дистрибутив J2OBJC отсюда: https://github.com/google/j2objc/releases [Обратите внимание, что версия для скачивания не является исходным кодом. Если вы загружаете исходный код, вам нужно сначала собрать J2OBJC]
Откройте терминал. Переместился в загруженную папку 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.
Приведенная выше команда сгенерирует все файлы.h и.m в папке назначения в структуре org / apache / common. Итак, перетащите эту корневую папку "org" в ваш проект.
Add Framework: откройте свой проект XCode. Выберите цель. Выберите вкладку "Общие". Перейти к
Linked libraries and Framework
раздел.Нажмите + кнопку. Выберите Добавить другое. Перейдите к пути {Папка, куда вы скачали J2Objc}/frameworks/JRE.framework и добавьте ее.
Установите путь поиска заголовка и путь поиска фреймворка.
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.