Архив метки: Java

Python против Java в 2019 году

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

Часто кажется, что эти языки идеальны, и на самом деле они способны выполнять большинство задач, но есть ключевые отличия, которые могут помочь вам сформулировать свое решение. Мы начнем с объяснения каждого языка и ключевых характеристик, а затем сравним их в различных областях информатики, чтобы прояснить ваш выбор.

 

Java

Java — это язык программирования общего назначения со статической типизацией, это объектно-ориентированный и параллельный язык. Java должен был быть языком WORA (писать один раз в любом месте), он был разработан для работы на любой платформе с минимальным количеством зависимостей с помощью виртуальной машины Java (JVM).

 

Python

Python — это динамически типизированный язык программирования общего назначения. Раннее развитие Python началось в исследовательском институте в Нидерландах. Первоначальной мотивацией для этого было создание языка более высокого уровня для преодоления разрыва между C и оболочкой, как утверждает автор, в то время создание утилит системного администрирования с использованием C было довольно сложным. Синтаксис также мотивировался несколькими языками, такими как Algol68, Pascal и ABC, и должен был быть читаемым и чистым.

Теперь давайте посмотрим на разницу между Python и Java.

 

Python против Java: ключевые отличия

Производительность

У языков нет скорости, у них есть только семантика. Если вы хотите сравнить скорость, вы должны выбрать конкретные реализации для сравнения друг с другом.

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

 

Популярность

Популярность всегда была игрой между этими двумя языками, поскольку они были близким конкурентом в топ-3 популярных позиций, наряду с javascript. До революции Javascript Java была самым популярным языком номер один. Когда впервые появился Javascript, основатели выбрали имя, близкое к Java, чтобы оно набирало популярность.

Согласно Octoverse Github, Java был вторым наиболее используемым языком на Github, после Python.

В опросе разработчиков Stackoverflow, выпущенном в 2018 году, Python стал самым быстрорастущим языком программирования, заняв место C # в этом году и обогнав PHP в прошлом году. Java по-прежнему стоит выше Python и пользуется популярностью у 45% разработчиков, а у Python — 39%, однако этот разрыв сокращается.

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

 

Синтаксис

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

В этом простом определении класса мы создали простой класс fruit с конструктором, который представляет собой код, который будет выполняться при создании экземпляра объекта, а также определил две простые функции, каждая из которых печатает одну из атрибуты объекта.

class Fruit:

 def_init_(mysillyobject, name, color);

 mysillyobject.name=name

 mysillyobject.color=color

 def myfunction(abc) :

 print("Привет я а "+ abc.name)

 def mycolor(abc):

 print("Привет мой цвет " + abc.color)

p1 = Fruit ("Apple", "red")

p1.myfunction()

 

Java, с другой стороны, следует строгим правилам синтаксиса, это статически типизированный язык, в котором вам необходимо явно объявить типы переменных, и не должно быть обнаружено аномалий, код для начала не будет компилироваться. Хотя это не так просто для начинающих, некоторые разработчики находят утешение в ясности статически типизированных языков, но многие разработчики не чувствуют себя комфортно, следуя правилам отступов, особенно с большими базами кода.

  publicclassFruit {

 String name;

 String color;

 public Fruit( String name, String color){

 this.color=color;

 this.name=name;

 }

 public void myfunction()

 {

 System.out.println("Привет я а :" +name);

 }

 public void mycolor( )

 {

 System.out.println("Привет мой цвет:" + color);

 }

 

Это эквивалентно классу Fruit, который мы определили в Python с точно такими же функциями.

 

Работа и зарплата

Кажется, что нет объективного различия или сравнения между Python и Java-заданиями или зарплатой. И тот, и другой очень популярны, поэтому, если вы приобретете приличный опыт в любом из них, вы можете начать работать в качестве разработчика программного обеспечения или стажера, чтобы начать свою карьеру. Наличие рабочих мест или зарплаты не должно быть вашим критерием для выбора любого языка программирования, выберите тот, к которому вы могли бы относиться лучше.

 

Python против Java: Использование/приложения в различных областях

Разработка игр

Мы не будем говорить об общей разработке игр для ПК, поскольку ни Python, ни Java не могут реально конкурировать с C ++/C # в этой области с их огромной экосистемой. Более того, разработка игр — это область, которая требует максимально возможной производительности для обеспечения беспроблемного взаимодействия с пользователями, и хотя Java и Python не медленны, они не обеспечивают наилучшую производительность для разработки игр.

JMonkeyEngine — это популярный движок для разработки игр с открытым исходным кодом на Java, хотя он не наравне с Unreal и Unity, это, безусловно, мощный движок, который поможет вам создавать потрясающие игры.

Если вы хотите поэкспериментировать с компьютерной графикой с нуля или создать свой собственный движок, OpenGL также предоставляет привязки для языка Java.

Хотя Python сам по себе не является мощной опцией для создания игр, есть Cocos, Panda3d, Pygame и несколько других движков/фреймворков для сборки игр с Python.

Тем не менее, Python не полностью исключен для профессиональной разработки игр, это важный инструмент для разработчика игр, так как Python является популярной опцией языка сценариев для многих разработчиков, включая разработчиков игр. Пакеты редактирования, такие как Maya, также используют Python в качестве языка сценариев.

 

Веб-разработка

Оба языка используются в веб-разработке бэкэнда. Backend web development — это ветвь веб-разработки, связанная с созданием программного обеспечения, которое будет работать на сервере. Это самая популярная область разработки согласно опросу разработчиков StackOverflow.

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

Два самых популярных фреймворка для Python — это Django и Flask. Flask — это микро-фреймворк, он предоставляет вам основные функциональные возможности, такие как маршрутизация запросов без особых накладных расходов. Django — это более функциональная опция, которая может помочь вам создать мощный бэкэнд, используя при этом эффективность и безопасность. Django оснащен мощным уровнем ORM, который облегчает работу с базами данных и выполнение различных операций с данными.

Что касается Java, Spring, пожалуй, самая известная серверная среда Java с огромной экосистемой и огромным сообществом вокруг нее. Spring используется Orange, Dell, GE и многими другими предприятиями, и, хотя в настоящее время он не так популярен, как Django, он является мощным вариантом для создания приложений уровня предприятия.

 

Машинное обучение

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

Есть TensorFlow, Keras, Sickit-Learn и PyTorch Facebook, и это, безусловно, самый популярный язык в этой области.

Java также считается хорошим вариантом, когда речь идет о машинном обучении, его легко отлаживать и использовать, и он уже используется для крупномасштабных приложений и приложений уровня предприятия. Среди библиотек, которые вы можете использовать в этой области, — Weka, Mallet, DeepLearning4 и MOA.

 

Сводка сравнения Python и Java

Напомним, вот быстрое сравнение между двумя языками, охватывающее основные моменты, которые мы обсуждали.











ТЕХНОЛОГИЯPythonJava
ПопулярностьОчень популярныйОчень популярный
СинтаксисПростота в освоении и использованииКомплекс включает в себя кривую обучения
ПроизводительностьМедленнее, чем Java в различных реализацияхОтносительно очень быстр
МежплатформенныйДАДа, благодаря JVM
Бэкенд-ФреймворкиDjango, FlaskSpring, Blade
Библиотеки Машинного ОбученияTensorflow, Pytorch,Weka, Mallet, Deeplearning4j, MOA
Движки Разработки ИгрCocos, Panda3dJMonkeyEngine

 

Java и Python являются одновременно способными и популярными языками, поэтому не будет недостатка в ресурсах, если вы выберете один из них и отправитесь в путешествие. Если вы новичок в программировании, было бы лучше придерживаться Python только потому, что он действительно прост и использует англоязычный синтаксис, он используется во многих вводных курсах по информатике по всему миру. Однако, если ваша цель — создавать приложения уровня предприятия, происходящие из мира C/C ++, то Java, вероятно, вам покажется довольно знакомым. Все зависит от того, что вы планируете построить, и где вам хочется путешествовать со своим новым навыком.



2019-11-25T14:35:50
Java

JUnit 5 released

Пишите тесты? Стандарт дефакто для большинства функциональных тестов это JUnit. Многие из нас уже привыкли к 4.12 и тут произошло невообразимое. Спустя 2 года работы вышел JUnit 5!

Релиз раcсчитан на Java 8 или выше. В отличии от предыдущих этот релиз состоит из 3 подпроектов: JUnit Platform, JUnit Jupiter, JUnit Vintage. Первый — это целая платформа для запуска тестов, цель такой платформы — большая гибкость в подготовке настройке запуска тестов. Вообще, видно какую работу ребята проделали в сторону гибкости фреймворка, появились лаунчеры и TestEngin'ы, благодаря которым теперь можно еще больше настраивать всё вокруг запуска тестов. Второй проект Jupiter — это куча новых аннотаций и переход на новый виток эволюции от Rules и Runners к концепции расширений Extensions. Почитать про модель расширений можно вот здесь. JUnit Vintage, третий подпроект, предоставит вам возможности запуска тестов Junit 3 и 4 на основе TestEngine. В общем отлично! Технологии развиваются, становятся более гибкими, а я как раз приступил к разработке инфраструктуры для тестирования библиотеки для создания телеграм ботов. Отличный момент, чтобы проверить возможности JUnit 5.

Автор: Roman Brovko

Руководство по Java 9: компиляция и запуск проекта

Команды java и javac редко используются Java-программистами. Такие инструменты, как Maven и Gradle делают их почти не нужными. Однако Maven и Gradle до сих пор не предоставляют полную поддержку для Java 9, поэтому, если вы хотите начать использовать её уже сейчас или просто хотите узнать некоторые полезные тонкости до официального релиза, стоит научиться вызывать java, javac и jar для управления своим кодом.

Статья призвана показать примеры использования этих команд, а также то, как эти команды изменились по сравнению с прошлыми версиями Java. Дополнительно будут рассмотрены новые инструменты: jdeps и jlink. Предполагается, что вы хоть немного знакомы с предыдущими версиями команд java/javac/jar и с модульной системой Java 9.

Установка Java 9

Сперва необходимо установить Java 9. Вы можете скачать её с сайта Oracle, но рекомендуется использовать SdkMAN!, так как в будущем он позволит вам с легкостью переключаться между разными версиями Java.

Можно установить SdkMAN! с помощью этой команды:

Посмотрите, какая сборка является последней:

Затем установите Java 9:

Теперь, если у вас установлены другие версии Java, вы можете переключаться между ними с помощью команды:

Компиляция и запуск «по-старому»

Для начала напишем какой-нибудь код, чтобы проверить наши инструменты. Если не использовать модульный дескриптор, то все выглядит так же, как и раньше.

Возьмем этот простой Java-класс:

Теперь, так как мы не использовали никаких особенностей Java 9, мы можем скомпилировать всё как обычно:

Команда создаст файл класса out/app/Main.class. Запустить его можно так же, как и в прошлых версиях:

Программа выведет Hello Java 9.

Теперь создадим библиотеку Greeting также без особенностей Java 9, чтобы посмотреть, как это работает.

Создадим файл greeting/ser/lib/Greeting.java со следующим кодом:

Изменим класс Main для использования нашей библиотеки:

Скомпилируем эту библиотеку:

Чтобы показать, как работают оригинальные Java-библиотеки, мы превратим эту библиотек
у в jar-файл без дескрипторов модулей Java 9:

Команда создаст файл libs/lib.jar, содержащий класс lib.Greeting.

Просмотреть информацию о jar-файле можно с помощью опции tf:

Команда должна вывести:

Теперь для компиляция app.Main нам необходимо указать компилятору, где найти класс lib.Greeting.

Используем для этого cp (classpath):

И то же самое для запуска программы:

Мы можем упаковать приложение в jar-файл:

И затем запустить его:

Вот так выглядит структура нашего проекта на данный момент:

Модуляризация проекта

Пока что ничего нового, но давайте начнем модуляризацию нашего проекта. Для этого создадим модульный дескриптор (всегда называется module-info.java и размещается в корневой директории src/):

Команда для компиляции модуля в Java 9 отличается от того, что мы видели раньше. Использование старой команды с добавлением модуля к списку файлов приводит к ошибке:

Чтобы понять, почему наш код не компилируется, необходимо понять, что такое безымянные модули.

Любой класс, который загружается не из именованного модуля, автоматически выполняет часть безымянного модуля. В примере выше перед созданием модульного дескриптора наш код не был частью какого-либо модуля, следовательно, он был ассоциирован с безымянным модулем. Безымянный модуль — это механизм совместимости. Проще говоря, это позволяет разработчику использовать в приложениях Java 9 код, который не был модуляризирован. По этой причине код, относящийся к безымянному модулю, имеет правила сродни Java 8 и ранее: он может видеть все пакеты, экспортируемые из других модулей, и все пакеты безымянного модуля.

Когда модульный дескриптор добавляется к модулю, его код больше не является частью безымянного модуля и не может видеть код других модулей, пока не импортирует их. В случае выше модуль com.app не требует никаких модулей, поэтому модуль библиотеки Greeting для него не виден. Он может видеть только пакеты модуля java.base.

Модули в Java 9, за исключением неуловимого безымянного модуля описанного выше, должны объявлять, какие другие модули им необходимы. В случае с модулем com.app единственным требованием является библиотека Greeting. Но, как вы могли догадаться, эта библиотека (как и другие библиотеки, не поддерживающие Java 9) не является модулем Java 9. Как же нам включить её в проект?

В таком случае вам нужно знать имя jar-файла. Если у вас есть зависимость от библиотеки, которая не была конвертирована в модуль Java 9, вам надо знать, какой jar-файл вызывается для этой библиотеки, потому что Java 9 переведёт имя файла в валидный модуль.

Это называется автоматический модуль.

Так же, как и безымянные модули, автоматические модули могут читать из других модулей, и все их пакеты являются экспортируемыми. Но, в отличие от безымянных модулей, на автоматические можно ссылаться из явных модулей.

Чтобы узнать имя автоматического модуля, компилятор конвертирует неальфанумерические,
поэтому что-то вроде slf4j-api-1.7.25.jar превратится в имя модуля sl4j.api.

У нас есть библиотека с именем lib.jar. Давайте переименуем jar-файл в greetings-1.0.jar:

Это более стандартное имя файла, и теперь мы можем сказать Java включить автоматический модуль с приемлемым именем greetings. И можем вызывать его из com.app модуля:

Модули не добавлены в classpath. Как и обычные jar-файлы, они используют новый флаг –module-path (-p). Теперь мы можем скомпилировать наши модули следующей командой:

Чтобы запустить app.Main командой java мы можем использовать новый флаг –module (-m), который принимает либо имя модуля, либо шаблон module-name/main-class:

И мы получим вывод Hi, there.

Для создания и использования app.jar в качестве исполняемого jar-файла выполните следующие команды:

Следующим шагом будет модуляризация библиотек, которые используются нашим приложением.

Модуляризация библиотек

Для модуляризации библиотеки нельзя сделать ничего лучше, чем использовать jdeps — инструмент для статистического анализа, который является частью Java SE.

Например, команда, которая позволяет увидеть зависимости нашей небольшой библиотеки, выглядит так:

А вот результат её выполнения:

Как и ожидалось, библиотека зависит только от java.base модуля.

Мы знаем, что com.app зависит от модуля greetings. Давайте попробуем использовать jdeps, чтобы он подтвердил нам это. Для этого нужно удалить файлы module-info.calss и app.jar и затем запустить jdeps:

Результат:

Команда:

Результат:

Хорошо, но можно лучше. Мы можем попросить jdeps автоматически сгенерировать модульный дескриптор для набора jar-файлов. Просто укажите ему, куда сохранять сгенерированные файлы (например, в папку generated-mods), и где находятся jar-файлы:

Команда создаст два файла: generated-mods/app/module-info.java и generated-mods/greetings/module-info.java со следующим содержимым:

Теперь мы можем добавить сгенерированный дескриптор для нашей библиотеки в её исходный код, переупаковать её, и у нас получится полностью модульное приложение:

Теперь у нас есть полностью модуляризированные библиотека и приложение. После удаления сгенерированных и бинарных файлов, структура нашего приложения выглядит следующим образом:

Обратите внимание, что для получения хороших данных от jdeps вы должны предоставить местоположение всех jar-файлов, которые используются в приложении, чтобы он мог составить полный граф модуля.

Наиболее простым способом получить список всех jar-файлов, которые используются в библиотеке, является использование скрипта Gradle. Он выведет пути локальных jar-файлов для всех зависимостей библиотек, которые вы добавите в секцию зависимостей, и скачает их, если необходимо:

Если у вас нет Gradle, вы можете использовать SdkMAN! для его установки:

Для получения списка зависимостей используйте следующую команду:

Полученную информацию передайте jdeps для анализа и автоматической генерации метаданных.

Это файл, который jdeps выводит для javaslang.match:

Создание собственного образа среды выполнения

С помощью jlink Java-приложения могут распространяться как образы, которые не требуют установки JVM.

Следующая команда создает образ для нашего com.app модуля без оптимизации, сжатия или отладочной информации:

Меньший размер может быть достигнут использованием некоторых флагов jlink, таких как –strip-debug и –compress:

Размер пакетов можно посмотреть с помощью команды du -sh:

Для запуска приложения используйте предоставляемый лаунчер в директории bin:

Вы должны увидеть сообщение Hi there.

На этом всё.

Автор: Roman Brovko

Опубликованно в разделе java прикрепленные теги Дата публикации автор: .

Запуск NettyJava на android эмуляторе

Сегодня 09.05.2012.
Сегодня произошла большая радость. Мне удалось откомпилировать и запустить мой тестовый консольный клиент, написанный на Netty, на android-эмуляторе!

Суть решения:
1. Создать в проекте папку «libs» и положить в неё netty.jar (ADT автоматически подгружает папку с таким именем)
2. Добавить программе разрешение на выход в интернет. В файле AndroidManifest.xml добавить запись

Просто рассказ:
Вчера я довёл до некоторого стабильного состояния классы Client и Server, основанные на NettyJava.
А сегодня утром написал короткое консольное приложение, которое может запускаться как сервер и клиент и цепляется к порту моего компьютера.
После отладки работы клиента и сервера под управлением JVM в Windows, я приступил к созданию тестового консольного приложения для Android.
Я думал, что меня встретят трудности, когда я попытаюсь использовать Client класс в android-приложении.

Так и произошло. Но на мою радость, я нашёл решение в google за один вечер.

Суть проблемы была в том, что хотя Eclipse и добавил JAR файл в текущий android-проект, но при запуске проекта на эмуляторе — библиотеку netty.jar не попадала на андроид.

Ответ оказался простым, во что я и верил, ADT плагин Eclipse не подгружал мой netty.jar.
Оказалось, что ADT подгружает внешние *.jar библиотеки только из папки «libs».
Я создал эту папку в своём проеке, поместил туда netty.jar и…
Мой клиент написанный на Netty заработал на Android эмуляторе!

Ниже пример клиент-серверной программы. (В данном состоянии пример не будет запускаться, т.к. здесь не хватает реализации классов Client и Server).

/**
* Пример клиент-серверной программы, написанной на NettyJava.

* Запуск сервера:

*
java -jar server.jar

* Запуск клиента: *

java -jar server.jar client

* На стороне клиента пишем сообщения и они отправляются на сервер в * пакете {@link Packet1Ping}. Сервер выводит пришедшие пакеты в стандартный поток * вывода. * * Клиент и сервер заточены для запуска с одного компьютера. * Сервер и клиент работают с localhost:8080 * @author Galiego710 * */ public class Main { public static final void out(String str) { System.out.println(str); } /** * @param args */ public static void main(String[] args) throws IOException { out("Program is started."); out("Print 'quit' or 'exit' to exit."); // запустить как клиент или сервер if ( (args.length > 0) && (args[0].equals("client"))) { ClientProgram(); } else { ServerProgram(); } out("Program is ended."); System.exit(0); } /** * Серверная часть * @throws IOException */ public static void ServerProgram() throws IOException { out("Mode: Server"); final Server server = new Server("MainServer", new InetSocketAddress("localhost",8080)); // Устанвить хук на завершение программы Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { // отключить сервер server.stop(); out("ShutdownHook done."); } }); // Установить слушателя серверу server.setListener(new ConnectorListener() { @Override public void connectionOpen(ConnectorHandler handler) { out("+++ SERVER: Client connected."); } @Override public void packetReceived(ConnectorHandler handler, Packet packet) { out("+++ SERVER: received " + packet); } }); // Запуск сервера if(!server.start()) { System.err.println("Server can't started!"); } else { System.out.println("Server is started"); } BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Обрабатывать ввод с клавиатуры String str; do { System.out.print("Enter: "); str = br.readLine(); out("str=" + str); } while (!(str.equals("quit") || str.equals("exit"))); } /** * Клиентская часть * @throws IOException */ public static void ClientProgram() throws IOException { out("Mode: Client"); final Client client = new Client("user","pass", new InetSocketAddress("localhost",8080)); // Установить хук на закрытие программы Runtime.getRuntime().addShutdownHook(new Thread() { public void run() {
// потушить сервер client.stop(); out("ShutdownHook done."); } }); // Запустить клиента if(!client.start()) { System.err.println("Client can't started!"); } else { System.out.println("Client is started"); } BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Обрабатывать ввода с клавиатуры String str; do { System.out.print("Enter: "); str = br.readLine(); out("str=" + str); // отправить пакет client.sendPacket(new Packet1Ping(str)); } while (!(str.equals("quit") || str.equals("exit"))); } }
Смотрите также: NettyJava — асинхронный событийно ориентированный сетевой фреймворк

Автор: galiego710

java, linux: установка oracle jdk и JAVA_HOME (на примере archlinux)

С тех пор, как SUN/Oracle Java выпилили из дистрибутивов, приходится руками качать и ставить. Вкратце.

Качаем дистрибутив JDK под нашу архитектуру, например, в виде bin-файла. Даём ему права +x, запускаем в /opt (здесь и далее всё от рута), распаковывается в каталог /opt/jdk1.6.0_31. Читать

java sun wtk на linux 64 бита

Грустно, но на данный момент нет 64-битной wtk под линукс, даже классической 2.5.2. Если поставить 32-битную, она ругается и не работает. Пишет что-то типа:
Error libraries: libXt.so.6: wrong ELF class: ELFCLASS

Рассказываю как я всё запустил.

В дополнение к 64-битным JDK ставим 32-битную. Я качаю bin-пакет с java.sun.com и ставлю в /opt/jdkXXX с символической ссылкой на текущую версию этого хозяйства как /opt/jdk
Итак, ставим таким же образом 32-битную. И пусть 32-битная JDK будет в /opt/jdk-32.
Качаем WTK, на этот момент это sun_java_wireless_toolkit-2.5.2_01-linuxi486.bin.sh, ставим как обычно. Тоже пусть в /opt
При установке выбираем путь к нашей JDK: /opt/jdk-32/bin
Путь пусть будет /opt/WTK2.5.2
Ну, практически всё…

Надо лишь убедиться, что в запускалках в WTK стоят валидные пути, типа:
/opt/WTK2.5.2/bin/emulator:
javapathtowtk=/opt/jdk-32/bin/
Ну, и так далее.

И ещё надо иметь соответствующие 32-битные аналоги некоторых X-либ. Каких — вы узнаете при запуске тулбара или эмулятора (в том числе из других IDE). Ну, по памяти это что-то типа
...error while loading shared libraries: libXt.so.6: cannot open shared ...
Их также надо поставить из репозитория (или как там у вас в вашем дистрибутиве), они должны быть нормально доступны и вставть параллельно, не мешая нормальным родным 64-битным бинарникам.

Автор: Дмитрий