Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Java и андроид


Автор: Karadul 11.12.2012, 23:54
Как там обстоят дела с конвертацией программ на яве на ведро?

http://en.wikipedia.org/wiki/Dalvik_%28software%29
Цитата

A tool called dx is used to convert some (but not all) Java .class files into the .dex format. Multiple classes are included in a single .dex file. Duplicate strings and other constants used in multiple class files are included only once in the .dex output to conserve space. Java bytecode is also converted into an alternative instruction set used by the Dalvik VM. An uncompressed .dex file is typically a few percent smaller in size than a compressed .jar (Java Archive) derived from the same .class files.[3]


Это реально работает или придется что-то переписывать?

Автор: jk1 12.12.2012, 13:19
Цитата

Это реально работает или придется что-то переписывать?


В основном работает, есть проблемы только со специфичным функционалом. На андроиде: 

1) Могут отсутствовать security provider'ы для некоторых криптоалгоритмов 
2) Отсутствуют Swing и AWT
3) System.err и System.out ничего не делают
4) Различаются наборы системных пропертей (System.getproperty(...))
5) Механизм загрузки классов отличается, у Dalvik'а свои представления о класслоадинге. Так что если приложение использует сильное колдунство с загрузчиками классов, то оно с высокой вероятностью на андроиде не заработает 

Ну и конечно всякие нативные завязки на платформу вроде JNI/JNA, Runtime.exec(...) и т.д. тоже поотваливаются

Автор: Karadul 12.12.2012, 16:17
То есть гуй программа не спортируется?

3. А какой аналог System.err и System.out?

5. А что такое "сильное" колдунство?

Автор: jk1 12.12.2012, 19:07
Цитата

То есть гуй программа не спортируется?


Если gui на Swing\AWT - то нет. Если gui на другой технологии, то надо смотреть насколько она поддерживается под андроидом. SWT, как утверждается, работает, но сам я не пробовал.

Цитата

А какой аналог System.err и System.out?


Вместо этого на андроиде предлагается логи писать.

Цитата

А что такое "сильное" колдунство? 


Например написание собственного загрузчика классов, который получает байткод с удаленного сервера или генерирует его в рантайме.

Автор: Karadul 13.12.2012, 16:55
А в других языках стандартные потоки есть? Как тогда работают консольные программы? Все ЖМУ утилиты рассчитаны на консоль.

Автор: jk1 14.12.2012, 12:30
Цитата

Как тогда работают консольные программы? 


Под голый андроид консольные java-программы вообще не пишут. Если хочется, чтобы консольные java-приложения работали на андроиде, придется http://www.codeproject.com/Articles/202996/Write-a-console-app-on-Android-using-Java
Можно ли писать на других языках под андроид так, чтобы был доступ к нормальной консоли - не знаю, под андроид только на java писал

Автор: Karadul 21.12.2012, 05:39
А несовместимость между разными версиями андроида для явы есть, или это-сишкопроблемы?

Автор: jk1 23.12.2012, 07:48
Цитата

А несовместимость между разными версиями андроида для явы есть, или это-сишкопроблемы? 


Обычно java-код для андроида backward-compatible, т.е. код написанный для 2.1 будет работать на 2.2 и старше. В обратную сторону все не так радужно, так как фичи появлялись в платформе постепенно и на целевом смартфоне нужных приложению фич может и не быть из-за древности платформы. Как правило в манифесте указывается minSdkVersion для указания на минимальноую поддерживаемую приложением версию платформы. Максимальную версию указывать, по понятным причинам, смысла нет.

Автор: Karadul 24.12.2012, 10:34
Я слышал, что даже младшие версии андроида несовместимы. Интересно, откуда растут ноги у этого мнения?

Автор: LSD 24.12.2012, 12:00
Ну например теперь в GUI потоке запрещено делать сетевые вызовы. Это и раньше не приветствовалось, но теперь просто вызовет ошибку.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)