Могу ли я создать собственный модуль запуска для приложения JavaFX?

Мы разработали приложение JavaFX, которое мы планируем разместить в Mac App Store, но довольно поздно обнаружили, что в его нынешнем виде — поскольку оно имеет ограничения по функциональности/использованию, связанные с подпиской, оплаченной на нашем веб-сайте — оно скорее всего, будет отклонен за предложение этих дополнительных функций с помощью механизма, отличного от In App Purchase (Просмотреть рекомендации разделы 7.1, 7.13 и 7.15).

Мы хотели бы решить эту проблему, добавив In App Purchases в наше приложение JavaFX!

Первым решением, о котором я подумал, было бы включение «вспомогательного приложения» в пакет .app, содержащий классы JavaFX, связанный JRE и собственную оболочку, сгенерированную javapackager. Это вспомогательное приложение будет вызываться из приложения JavaFX и будет представлять список покупок в приложении. Большой! За исключением того, что IAP доступны с помощью StoreKit только из пакета приложений, с которым они связаны в iTunes Connect. И вспомогательные приложения внутри моего пакета .app не могут использовать тот же идентификатор пакета, что и основное приложение (собственная оболочка).

Другое решение было бы, если бы я мог заменить простую нативную оболочку, сгенерированную javapackager, своим собственным исполняемым файлом. Когда приложение .app было запущено, моя собственная оболочка вызывала JAR с помощью связанной JRE точно так же, как это делает текущая оболочка, но она также могла представлять пользовательский интерфейс для совершения покупок в приложении (связь между Java-частью и ее оболочкой, вероятно, будет сложно, но в конечном итоге это может быть достигнуто с помощью такой глупости, как запись одной части в [изолированный] файл, который отслеживается другой).

Тогда мой вопрос: доступен ли где-нибудь исходный код родной оболочки/лаунчера, сгенерированный javapackager, или исходный код самого javapackager? И если нет, кто-нибудь знает, как файл JAR, связанный с .app под /Java, вызывается этой программой запуска?


person Craig McMahon    schedule 10.11.2015    source источник
comment
После прочтения вашего вопроса кажется, что ваш вопрос действительно таков: Где взять исходники JavaFX?, а точнее: hg .openjdk.java.net/openjfx/9-dev/rt/file/tip/modules/   -  person jewelsea    schedule 11.11.2015
comment
Также обратите внимание, что инструмент javafxpackager в Mac OSX — это просто сценарий оболочки, поэтому вы можете просмотреть его в текстовом редакторе (или просто с помощью less и т. д.). Этот сценарий выполняет некоторую хозяйственную работу, а затем вызывает инструмент Java, исходный код которого указан выше @jewelsea.   -  person James_D    schedule 11.11.2015
comment
Я нашел средство запуска OpenJDK здесь. Проблема в том, что указанный .dylib отсутствует в пакете приложений, сгенерированном Oracle Java. Я запустил команду opensnoop и запустил свое приложение и заметил, что libjli.dylib вызывается первым, поэтому я предполагаю, что это так, но я не знаю, как его использовать.   -  person Craig McMahon    schedule 11.11.2015
comment
И я думаю, мне следует уточнить, что это не javapackager приложение, которое мне нужно перепроектировать, а фактический собственный модуль запуска, который вызывается, когда я дважды щелкаю пакет .app.   -  person Craig McMahon    schedule 11.11.2015
comment
Я не уверен, сколько дополнительной помощи вы получите по этому поводу в StackOverflow, но вы всегда можете попробовать задать более конкретный вопрос на странице openjfx-dev список рассылки, если хотите.   -  person jewelsea    schedule 11.11.2015


Ответы (1)


Да, ты можешь.

Исходный код средства запуска JavaFX находится в свободном доступе на веб-сайте OpenJDK. Для начала вам нужно скопировать файл main.m из папки main/native/launcher/mac в исходном репозитории. Для Java FX 8 это здесь: http://hg.openjdk.java.net/openjfx/8/master/rt/file/f89b7dc932af/modules/fxpackager/src/main/native/launcher/mac/main.m.

Затем вы создаете новый проект в Xcode и копируете этот файл main.m. Когда вы создаете проект, создается пакет .app, и в папке Contents/Mac OS в этом пакете находится ваш новый исполняемый файл запуска. Скопируйте это в пакет приложений, сгенерированный javapackager, и запустите этот пакет как обычно, и это будет ваш пользовательский модуль запуска, который будет выполнен первым.

person Craig McMahon    schedule 11.11.2015