Как создать мобильную ориентированную мультиплатформенную разделяемую библиотеку на Java? - PullRequest
7 голосов
/ 07 марта 2011

У меня есть приложение Java, которое работает на BlackBerry (JDE 4.5). Я хочу портировать это приложение на Android и иметь возможность поддерживать 2 приложения одновременно. Я также могу портировать это приложение на другие платформы Java (J2ME?).

Я понимаю, что хорошая часть кода должна быть специфичной для каждой платформы (пользовательский интерфейс и другие вещи). Но я также чувствую, что большая часть кода может (должна) использоваться совместно (классы, связанные с доменом).

Каков наилучший способ достичь этого и каких ошибок следует избегать?

Мне удалось создать JAR со всеми моими общими классами, которые я смог интегрировать в свое приложение BlackBerry (используя preverify и rapc). Но:

  • JAR - это библиотека J2SE. Как я могу убедиться, что он будет работать (или даже компилироваться) на BlackBerry, Android или J2ME?
  • Я также использую библиотеку JSON, нацеленную на J2ME (https://github.com/upictec/org.json.me/). Эта библиотека, похоже, использует какие-то директивы предварительной обработки (CLDC, см. https://github.com/upictec/org.json.me/blob/master/src/main/java/org/json/me/JSONObject.java#L392). Как я могу использовать (или преобразовать ) эта библиотека использует правильные определения предварительной обработки?

Ответы [ 5 ]

4 голосов
/ 07 марта 2011

Это, вероятно, будет трудно:

  • Как вы уже определили, код пользовательского интерфейса должен быть различным для каждой платформы.
  • Существуют серьезные различия между платформами Java SE / Android и Java ME. Например, у ME нет каркаса коллекций или стеков java.io или java.nio.

Трудно предсказать по предоставленной вами информации, но есть большая вероятность, что вы потратите больше времени на борьбу с зависимостями платформы, чем сэкономите, поделившись базой кода.

2 голосов
/ 07 марта 2011

В наши дни самым большим камнем преткновения для совместного использования кода является то, что BlackBerry VM и Android VM обе поддерживают разные версии языка Java. BlackBerry использует подмножество Java 1.3, Android использует подмножество Java 1.5. (Кроме того, ни одна из платформ не реализует Java VM, обе используют свои собственные VM. Java используется в качестве языка программирования. Байт-коды Java должны быть преобразованы в соответствующий собственный формат VM, прежде чем они смогут работать на платформе.)

Самое большое отличие, которое вы найдете как разработчик библиотеки, заключается в том, что в BlackBerry отсутствуют те вещи, которые были представлены в 1.5, очень важные вещи, такие как дженерики и перечисления. Хуже того, классы Коллекций отсутствуют в BlackBerry. Это прискорбно, но так было давно.

Это означает, что для того, чтобы быть по-настоящему переносимым, вы должны записать в наименьший общий знаменатель, что означает использование (очень) классов в старом стиле, таких как Hashtable и Vector, без использования обобщений, сворачивание ваших собственных перечислений (как в 1-м издании эффективной Java) и т. д.

Или вы создаете две библиотеки: современную версию для Android и урезанную версию (со всеми необходимыми материалами) для BlackBerry.

Трудно сказать, что тебе подходит.

2 голосов
/ 07 марта 2011

Вместо того, чтобы предварительно упаковать вашу совместно используемую библиотеку, я хотел бы рассмотреть возможность совместного использования проекта библиотеки и включения его в качестве зависимости в процессе сборки ваших мобильных приложений. Это позволит вам поделиться базой кода, но при этом она будет создана соответствующими сборщиками для ваших целевых устройств. С небольшим количеством волшебства IDE и небольшим вниманием к деталям вы сможете обнаруживать ошибки до того, как что-либо будет отправлено.

В качестве альтернативы, настройте ваш библиотечный проект на использование двух отдельных сборщиков для выявления ошибок. Это позволило бы обеспечить более чистое распространение, но вы можете столкнуться с проблемами, пытаясь убедить вашу IDE рассматривать проект как конкретное устройство для выявления проблемных областей.

Вполне вероятно, что в конечном итоге вы поддержите устройство с наименьшим общим знаменателем ( кашель Blackberry) и откажетесь от дополнительных возможностей более обширной реализации Java на Android.

К сожалению, ответ будет один из экспериментов. Попробуйте и посмотрите, что получится.

1 голос
/ 07 марта 2011

Статья Портирование кода Android на BlackBerry содержит некоторые подробные сведения о том, как работать с кодом, совместно используемым двумя платформами.

0 голосов
/ 07 марта 2011

Будет очень сложно создать общую библиотеку для BlackBerry и Android. если вы хотите простой метод, создайте свое приложение как веб-приложение. используя

телефонный разрыв с jQtouch

...