Конвертация Netbeans проекта AMShell в проект Android Studio. Статья первая

от
Android   android, j2me, javame, android studio, netbeans, amshell, android midp shell, android library

В 2013 году появилась Android Midp Shell (далее - AMShell), библиотека для Android, которая позволяла запускать исходный код J2ME на Android, не используя при этом эмулятор. Она давно не обновлялась и циклом статей об этой библиотеке я бы хотел дать ей вторую жизнь.

Первая статья про эту библиотеку появилась в том же году на Annimon'e. Результатом статьи был проект в Netbeans, который мы будем конвертировать в Android'овский проект, скачайте его перед прочтением основного материала - MidEditPortable.zip

Касательно самой библиотеки можно сказать следующее - она была разработана пользователем SilentKing и опубликована на этом сайте, но количество реализованных в ней API не позволяло запускать исходные коды каких-то сложных программ или игр. Однако, в связи с развитием такого крутого эмулятора под Android, как J2ME Loader, работать с такими API становится проще, ведь версия ядра J2ME этого эмулятора содержит как андроидовский, так и J2ME код. А значит, вполне возможно оживить эту библиотеку, этим мы собственно и займёмся.


Часть первая - импорт проекта в AndroidStudio
Примечание: я немного накосячил при создании скриншотов, поэтому, когда будете следовать этому туториалу обратите внимание, что в названиях обоих папок не должны быть пробелы(!!!), иначе AndroidStudio будет выводить при импорте проекта сообщение, что в название папок не должно быть пробелов!

Создайте две папки, в первую распакуйте исходники проекта Netbeans (в моем случае, это будет папка AMShell Netbeans), а другая понадобится для исходников проекта AndroidStudio (папка AMShell)
#1.png

Запустите AndroidStudio (В этой статье приведены скриншоты AndroidStudio версии 3.6.3), выберите пункт меню Import Project и укажите путь к папке с исходниками проекта Netbeans.
#2.png

Перед вами отобразится первый экран импорта, на котором нужно будет указать путь к папке, где будет храниться сконвертированный проект (в моем случае, это папка AMShell).
import#3.png

На финальном экране импорта мы не будем ничего менять и просто нажмём "Finish"
import#4.png

На этом стадия импорта завершена, осталось исправить ошибки и кое-что добавить в коде, этим мы займёмся во второй части.


Часть вторая - исправление багов и недочётов
После того, как отработал Gradle, вы увидите следующие сообщения об ошибках:
bugfixing#1.png
Для их исправления откройте директорию с файлами Gradle и перейдите в файл build.gradle
bugfixing#2.pngА затем добавьте в код файла строки, которые содержат комментарий "// Это нужно добавить", сам комментарий при этой добавлять не нужно. Затем нажмите "Sync now"
bugfixing#3.png
Примечание: если вам нужна документация Gradle при использовании проекта, нажмите на "Ok, apply suggestion".

После того, как Gradle внёс изменения, отобразятся три новых ошибки:
bugfixing#4.png
Для её исправления выделите третью ошибку и нажмите на "Fix Gradle wrapper and re-import project"

Примечание (да, опять :hack: ) - прежде, чем приступать к этому этапу убедитесь в том, что у вас установлен Android SDK 10 версии, это можно проверить таким образом:
bugfixing#4.1.png
Нажмите на иконку SDK Manager и посмотрите, стоит ли галочка напротив API 10, выделенного на картинке ниже:
bugfixing#4.2.png
Если нет, поставьте напротив него галочку и нажмите "apply". Без установленного SDK дальнейшие действия бессмысленные и при сборке AndroidStudio будет выдавать ошибку!
 
С ошибками пока покончено, теперь перейдём к изменениям в файлах Gradle и коде. После исправлений ошибок с Gradle вы можете заметить, что файлы в директории файлов Gradle изменились:
bugfixing#5.pngПерейдите в файл build.gradle (Module: app) (app - это название модуля, создаваемого в AndroidStudio по умолчанию, позднее это можно изменить) и измените версию compileSdkVersion на 10, а buildToolsVersion и вовсе удалите.
Понижение версии SDK нужно для того, чтобы при компиляции на устройствах с более высокой версией не было ошибок о ненайденных SDK (сама библиотека была создана во времена Android 2.3), ну а упоминание buildToolsVersion в Gradle не нужно по той причине, что мы если и будем использовать buildTools, то только версии API 10, который нам нужен для компиляции, а значит, она будет отличаться от данной.
В результате файл build.gradle (Module: app) будет выглядеть так:
bugfixing#6.png
Нажмите "Sync Now" и дождитесь, пока Gradle внесёт изменения.

На этом наша работа с проектом завершена, осталось попробовать запустить его


Часть третья - запуск проекта на устройствеПопробуем собрать проект на устройстве. В AndroidStudio можно использовать для этого как эмулятор, так и обычный смартфон. Для этого нажмите на кнопку "Run", которая находится первой после списка устройств.
bugfixing#7.png
У нас получилось! :-D Попробуйте проделать те же действия ради интереса.
running#1-min.jpg
В следующих статьях мы займёмся либо рефракторингом данного проекта, либо попробуем повысить версию API до современных и исправить ошибки.

running#2.jpg
+8   8   0
221