forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Android (http://forum.boolean.name/forumdisplay.php?f=150)
-   -   FAQ: Создание нового проекта на примере Hello world (http://forum.boolean.name/showthread.php?t=14127)

odd 28.01.2011 18:37

FAQ: Создание нового проекта на примере Hello world
 
Вложений: 9
Итак, приступаем к созданию первой программы. Прежде всего нам нужно запустить Eclipse IDE. Далее заходим в меню File - New - Project... Появится окошко показанное на рисунке 1. В нем выбираем тип проекта - Android Project. Далее появится окно в котором нужно будет заполнить довольно много полей (см. рисунок 2).

В поле Project name пишем название нашего проекта: Hello world
В поле Build target выбираем версию ОС под которую будет рассчитано наше приложение: выбираем версию 1.5. Если список версий не отображается, значит вы не указали или неправильно указали в настройках расположение Android SDK. Подробнее читайте в FAQ по настройке и установке Eclipse IDE.
В поле Aplication name вводим название приложения (под каким именем приложение будет отображаться в телефоне): Hello world
В поле Packege name указываем пространство имен, которое будет использоваться в программе. Все пространства имен пишутся без пробелов, используя точку. Указываем пространство имен: com.example.hello
В поле Create Activity обязательно ставим галочку и пишем название метода, который будет вызываться при запуске нашей программы: MainActivity
В поле Min SDK Version указываем минимальную версию SDK, в которой нормально должна работать наша программа. Тут нумерация несколько необычная. Дело в том, что в Android OS версии идут начиная с 1.5 то есть 1.5, 1.6 и т.д. до версии 2.3. Так вот по версия 1.5 считается 3 версией по данной нумерации. Версия 1.6 будет уже 4 версией и т.д. Вот такая особенность. В данном поле мы указываем значение 3.

Всё, заполнив все поля нажимаем кнопку "Finish". Проект создан.

В окне среды программирования можно найти наш проект используя вкладки Navigator или Packege Explorer (см. рисунок 3). Несколько слов о структуре папок в приложении, знать их очень важно для любого разработчика. В папке SRC лежат исходные коды нашего приложения написанные на языке Java. Пока там лежит только файл MainActivity.java с исходным текстом нашей программы. В папке RES находтся все ресурсы нашей программы, папка RES имеет 3 подпапки: drawable, layout, values. В папке drawable лежит вся графика, используемая в приложении. Пока там лежит только иконка нашей программки icon.png, но если в вашей программе есть и другие картинки, то все их нужно копировать именно сюда. В подпапке layout лежат XML файлы с разметками форм нашего приложения. Пока не буду объяснять что это и зачем, опишу позже. В папке values также содержится XML файл(ы) с описанием некоторых переменных. Чаще всего тут хранят различные строки с текстом. В папке GEN лежат различные Java классы генерируемые при компиляции, сюда лучше не лезть. В папке BIN будет лежать уже скомпилированный APK файл нашего приложения, который можно будет закачать в реальный телефон и проверить работоспособность программы там.

Итак, краткий обзор папок приложения я провел. А как же его запустить в эмуляторе? Для этого жмем клавиши Ctrl+F11 или через меню Run - Run в итоге у нас появится окошко с вопросом как запускать это приложение (см. рисунок 4). В данном окне нужно выбрать строчку "Android Aplication". Ура! Начался запуск эмулятора телефона. Эмулятор запустился и сразу порадовал нас заблокированным экраном (см. рисунок 5). Не очень дружелюбно с его стороны. Сначала нам нужно снять телефон с блокировки. Для этого нужно мышью нажать на картинку замочка и переместить замочек вправо. Появится рабочий стол мобильного телефона (см. рисунок 6). Снова нашей программы не видать. Где же она? Нажимаем мышью на кучу квадратиков в нижнем углу экрана. Появится главное меню мобильника (см. рисунок 7). Ну наконец-то, можно увидеть иконку нашего приложения Hello World. Теперь для запуска приложения кликаем по его иконке и лицезреем на экране работу нашего первого приложения под Android (см. рисунок 8).

Что происходит при запуске приложения?
При запуске приложения запускается указанный нами при создании приложения класс MainActivity.java Класс крайне прост, его исходный код по сути состоит всего из 2 строк:
Код:

package com.examles.hello;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Если вы уже кодили под Java ME, то знаете, что каждая программа (она же мидлет) имеет как минимум 3 точки входа: startApp(), pauseApp() и destroyApp():

startApp - вызывается при запуске программы
pauseApp - вызывается при сворачивании программы или при входящем звонке во время работы программы
destroyApp - вызывается при закрытии программы

Аналогичную ситуацию мы видим и в Android программе, но тут методов больше и они немного другие:

onCreate - вызывается при открытии программы, но перпед запуском
onStart - запуск программы
onPause - пауза в программе
onResume - продолжение работы программы после паузы
onStop - остановка программы, но ещё не закрытие
onDestroy - закрытие программы
onRestart - перезапуск программы

Итак, возвращаемся к нашему исходному коду. В нем мы видим, что в нем есть определение метода onCreate. Причем вся программа занимает всего 2 строки.

super.onCreate(savedInstanceState); - тут мы передаем обратно данные которые приняли при запуске приложения, так как мы их никак не используем, то передаем их дальше по очереди другим приложениям
setContentView(R.layout.main); - тут мы выводим на экран форму под названием main

Итак, наша программа просто выводит на экран некую форму под названием main. Надо сказать, что программы под Android очень похожи по своей структуре на обычные приложения для Windows. И там и тут приложение состоит из непосредственно кода и одной или нескольких форм, которые выводятся на экран. Тут ситуация та же. Код программы всего лишь выводит на дисплей некую форму под названием main. Может посмотрим на состав кода в данной форме? Код этот можно посмотреть в папке res/layouts/main.xml вот этот код:

Код:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
   
<TextView 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
   
</LinearLayout>

Проще говоря что мы можем видеть в данном файле разметки? У нас есть некий блок с линейной вертикальной разметкой элементов (LinearLayout) в котором содержится всего один элемент - некий TextView с текстом @string/hello. Эти странные собачки в тексте элемента говорят о том, что на самом деле выводимый на экран текст нужно искать не тут, а в файле с переменными res/values/strings.xml вот текст данного файла:

Код:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MainActivity!</string>
    <string name="app_name">Hello World</string>
</resources>

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

Как поменять выводимый на экран текст на свой?
Решений данной проблемы три:
1. Открыть файл strings.xml и изменить значение переменной hello на свой текст непосредственно там. При этом откроется симпатичный редактор показанный на рисунке 9. Попробуйте поменять так текст переменной на строку "Тут был Вася Пупкин", к примеру. Среда отлично понимает русский шрифт.
2. Немного подправить сам файл с формой (main.xml)
Исправлять нужно немного:
Код:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
        android:id="@+id/text" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Тут был Вася"
    />
</LinearLayout>

3. Изменить выводимую в форме строку программно. Тогда нужно будет немного изменить исходный текст нашей Java программы MainActivity.java (текст разметки формы main.xml тоже нужно править как показано в пункте 2)

Код:

package com.examles.hello;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tw = (TextView)findViewById(R.id.text);
        tw.setText("odd was here");
    }
}

Скорее всего вы так ничего и не пойметее из данного урока, но не слишком расстраивайтесь. Это нормально. Со временем вы будете понимать всё больше и больше. Главное читайте FAQ и книги по программированию под Android почаще. Удачи в разработках и не забывайте заглядывать в наши FAQи!

cherepets 02.05.2011 15:35

Ответ: FAQ: Создание нового проекта на примере Hello world
 
odd, можешь попробовать сделать и описать вот это:
http://microemu.blogspot.com/2008/11...n-android.html ?

odd 04.05.2011 23:30

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Прикольно. Насколько я понимаю, то там используется какой-то перекодировщик из Java в Android. Попробую обязательно. Если получится, то сделаю утилиту для автоматического преобразования, как я сделал для BlackBerry.

cherepets 05.05.2011 11:22

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Да, с такой утилитой было б круто. Сейчас у меня ничего не выходит на этапе сборки..

odd 12.05.2011 01:10

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Я тоже пока застрял на сборке. Но может все и получится.

cherepets 15.05.2011 12:53

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Вообще я читал, что опера мини была так портирована.
А она работает очень даже быстро. Так что способ не лишен смысла.
Тем более единственный аналог - netmite работает не очень хорошо и требует установки эмулятора в телефон.

odd 16.05.2011 12:50

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Да, я тоже Netmite откопал, но что-то у меня программы не работают под ним. Тем более нужно в телефон эмулятор ставить.

cherepets 21.06.2011 23:48

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Микроэмулятор можно еще для портирования на iOS использовать.
Было бы очень неплохо научиться наконец им пользоваться.

Кажется нашел проблему. В Build.xml указаны пути не соответствующие расположению файлов в SDK. Tools переместились в Platform tools.
После долгой возьни всё таки скормил build.xml со всеми настройками ant'у. 14 ошибок при компиляции примера((

Логи указывают на исходники микроэмулятора.
http://textsave.de/?p=65887


ЧАСТИЧНАЯ ПОБЕДА!
Программа собрана. Проблемы:
- не фуллскрин
- не фиксированая ориентация
- вылетает довольно быстро

AVL 14.03.2012 22:51

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Так что, есть где-нибудь faq на русском по портированию прог с j2me на андроид?

PassCall 13.05.2012 16:46

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Вложений: 1
У меня эмулятор чудит:
Вложение 16855
Что за шайтан?

P.S. Предварительно эмулятор спрашивает, какую камеру выбрать, а затем выплевывает кучу окошек командной строки.

...Спустя 5 минут...

А, не, все нормально. Оказывается, это он так долго запускается О_о

den 13.05.2012 16:58

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Эмулятор вообще лучше не закрывать.

PassCall 13.05.2012 17:16

Ответ: FAQ: Создание нового проекта на примере Hello world
 
А есть где нибудь (тут на форуме или вообще) справочник вида

%команда%|%зачем она нужна%|%фичи/баги%|%пример использования%

ну типа
Код:

Команда: DrawText (text:string,x:integer,y:integer);
_____________________________
Описание: Рисует текст "text", в точку с координатами x,y
_____________________________
Баги/Фичи: Желательно, чтобы текст не вылазил за экран
_____________________________
Пример: DrawText ("ololol",0,0);


AVL 13.05.2012 18:50

Ответ: FAQ: Создание нового проекта на примере Hello world
 
На английском языке все есть: http://developer.android.com (справа поле "search developer docs"). Вот только я так и не разобрался :(

PassCall 13.05.2012 23:44

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Цитата:

Сообщение от AVL (Сообщение 227924)
На английском языке все есть: http://developer.android.com (справа поле "search developer docs"). Вот только я так и не разобрался :(

Ну, хоть что-то. Да и в английском ближе к оригиналу, значит - точнее.

AVL 13.05.2012 23:50

Ответ: FAQ: Создание нового проекта на примере Hello world
 
Цитата:

Сообщение от PassCall (Сообщение 227939)
ближе к оригиналу

Вообще-то это и есть оригинал.


Часовой пояс GMT +4, время: 10:50.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot