Android Programming/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Android Programming/ru
| Old | New | Line | |
|---|---|---|---|
| 1 | + | Смотрите также [[Custom Drawn Interface/Android]] | |
| 2 | + | ||
| 3 | + | Общие знания о программировании под Android могут очень помочь в разработке интерфейса Lazarus для Android. | |
| 4 | + | ||
| 5 | + | ## Как... | |
| 6 | + | ||
| 7 | + | ### Построить NDK (Android Native Development Kit) OpenGL | |
| 8 | + | ||
| 9 | + | Просто выполните следующие действия: | |
| 10 | + | ||
| 11 | + | **Шаг 1** - Скачайте и установите Android NDK, Android SDK и Ant. Больше информации тут: [[Android Interface/Using the Android SDK, Emulator and Phones/ru|Android_Interface/Using_the_Android_SDK%2C_Emulator_and_Phones/ru]] | |
| 12 | + | ||
| 13 | + | **Шаг 2** - Установите pre-compiled FPC cross-compiler. Инструкции здесь: [[Android Interface|Android_Interface#Using_the_pre-compiled_compiler]] | |
| 14 | + | ||
| 15 | + | **Шаг 3** - Загрузите последнюю версию lazarus-ccr sourceforge code: | |
| 16 | + | ||
| 17 | + | `svn co `[`https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr`](https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr)` lazarus-ccr` | |
| 18 | + | ||
| 19 | + | или если вы думаете что это слишком много, вы можете скачать только каталог lazarus-ccr/bindings/android-ndk | |
| 20 | + | ||
| 21 | + | **Шаг 4** - Постройте Pascal Library | |
| 22 | + | ||
| 23 | + | Откройте проект lazarus-ccr/bindings/android-ndk/examples/opengltest/opengltest.lpi | |
| 24 | + | ||
| 25 | + | Откройте пункт меню Project-\>Project Options-\>Paths и где написано "Libraries -Fl" вы должны увидеть следующее значение: | |
| 26 | + | ||
| 27 | + | `/home/felipe/Programas/android-ndk-r5/platforms/android-9/arch-arm/usr/lib` | |
| 28 | + | ||
| 29 | + | Измените его на правильный путь, который указывает на библиотеку NDK с минимальной необходимой версией Android API Level | |
| 30 | + | ||
| 31 | + | Теперь постройте проект используя Lazarus. | |
| 32 | + | ||
| 33 | + | **Шаг 5** - Настройка среды сборки | |
| 34 | + | ||
| 35 | + | Откройте файл opengltest/local.properties и в строке: | |
| 36 | + | ||
| 37 | + | `sdk.dir=/home/felipe/Programas/android-sdk-linux` | |
| 38 | + | ||
| 39 | + | Измените этот путь на местоположение SDK | |
| 40 | + | ||
| 41 | + | **Шаг 6** - Постройка APK | |
| 42 | + | ||
| 43 | + | Откройте консоль и введите следущие команды: | |
| 44 | + | ||
| 45 | + | `cd lazarus-ccr/bindings/ndk/examples/opengltest/android`\ | |
| 46 | + | `ant debug` | |
| 47 | + | ||
| 48 | + | Файл APK будет помещен в opengltest/android/bin/ | |
| 49 | + | ||
| 50 | + | **Шаг 7** - Установка APK | |
| 51 | + | ||
| 52 | + | Если на этом шаге вы получите сообщение об ошибке прав доступа, читайте: [[Android Interface/Using the Android SDK, Emulator and Phones|Android_Interface/Using_the_Android_SDK%2C_Emulator_and_Phones#Recognition_of_devices_under_Linux]] | |
| 53 | + | ||
| 54 | + | Команда, чтобы установить APK на телефоне: | |
| 55 | + | ||
| 56 | + | `cd opengltest/android`\ | |
| 57 | + | `~/Programas/android-sdk-linux/platform-tools/adb install bin/OpenGLNDKTest-debug.apk `\ | |
| 58 | + | `2395 KB/s (107299 bytes in 0.043s)`\ | |
| 59 | + | ` pkg: /data/local/tmp/OpenGLNDKTest-debug.apk`\ | |
| 60 | + | `Success` | |
| 61 | + | ||
| 62 | + | Если вы получили сообщение об ошибке, что APK уже установлен, вы можете установить его с помощью команды: | |
| 63 | + | ||
| 64 | + | `~/Programas/android-sdk-linux/platform-tools/adb uninstall com.pascal.opengltest` | |
| 65 | + | ||
| 66 | + | После можно запустить *adb logcat* чтобы увидеть журнал, в то время как вы запустите его в телефон через недавно добавленную иконку: | |
| 67 | + | ||
| 68 | + | `~/Programas/android-sdk-linux/platform-tools/adb logcat` | |
| 69 | + | ||
| 70 | + | ### Получить параметры экрана | |
| 71 | + | ||
| 72 | + | Вначале нужно заполнить TDisplayMetrics: | |
| 73 | + | ||
| 74 | + | ``` pascal | |
| 75 | + | uses androidutil; | |
| 76 | + | ||
| 77 | + | var | |
| 78 | + | MyDisplayMetrics: TDisplayMetrics; | |
| 79 | + | Str: string; | |
| 80 | + | // | |
| 81 | + | lHeight, lWidth: Integer; | |
| 82 | + | xdpi, ydpi, lScreenSize: Single; | |
| 83 | + | begin | |
| 84 | + | // .. | |
| 85 | + | // Objects | |
| 86 | + | ||
| 87 | + | MyDisplayMetrics := TDisplayMetrics.Create; | |
| 88 | + | Activity.getWindowManager().getDefaultDisplay().getMetrics(MyDisplayMetrics); | |
| 89 | + | ``` | |
| 90 | + | ||
| 91 | + | После вы можете получить информацию о дисплее из TDisplayMetrics: | |
| 92 | + | ||
| 93 | + | ``` pascal | |
| 94 | + | lHeight := MyDisplayMetrics.heightPixels(); | |
| 95 | + | lWidth := MyDisplayMetrics.widthPixels(); | |
| 96 | + | xdpi := MyDisplayMetrics.xdpi(); | |
| 97 | + | ydpi := MyDisplayMetrics.ydpi(); | |
| 98 | + | lScreenSize := sqrt(sqr(lHeight / ydpi) + sqr(lWidth / xdpi)); | |
| 99 | + | ldensity := MyDisplayMetrics.density(); | |
| 100 | + | ldensityDpi := MyDisplayMetrics.densityDpi(); | |
| 101 | + | scaledDensity := MyDisplayMetrics.scaledDensity(); | |
| 102 | + | ``` | |
| 103 | + | ||
| 104 | + | Обратите внимание, что многие устройства врут о xdpi и ydpi, поэтому не стоит доверять lScreenSize, рассчитанному выше. Смартфоны могут сообщить о размере экрана 10 дюймов, хотя их настоящий размер может быть около 4. | |
| 105 | + | ||
| 106 | + | ## Подробная информация об устройствах с Android | |
| 107 | + | ||
| 108 | + | Поскольку существует так много Android устройств, эта информация может быть полезно для отслеживания информации о них. Смотрите также в википедии [Сравнение устройств с Android](http://ru.wikipedia.org/wiki/Сравнение_устройств_с_Android) и подробную информацию о процессорах в [Android#System_Requirements](https://wiki.mozilla.org/Mobile/Platforms/Android#System_Requirements). | |
| 109 | + | ||
| 110 | + | ### Смартфоны | |
| 111 | + | ||
| 112 | + | | **Производитель** | **Модель** | **Android API Name (Build.Model)** | **Процессор** | **Версия Android** | **Мультитач** | **Комментарий** | | |
| 113 | + | |----|----|----|----|----|----|----| | |
| 114 | + | | HTC | Wildfire | HTC Wildfire | armv6 | 2.1=\>2.2 | Да\|\|- | | | |
| 115 | + | | Sony Erricson | Xperia X10 | X10i | armv7 | 1.6=\>2.1 | Нет\|\|- | | | |
| 116 | + | ||
| 117 | + | ### Планшеты | |
| 118 | + | ||
| 119 | + | | **Производитель** | **Модель** | **Android API Name (Build.Model)** | **Процессор** | **Версия Android** | **Мультитач** | **Комментарий** | | |
| 120 | + | |----|----|----|----|----|----|----| | |
| 121 | + | | Toshiba | Folio 100 Tablet | TOSHIBA_FOLIO_AND_A | armv7 | 2.2 | Yes\|\|- | | | |
| 122 | + | ||
| 123 | + | ### Списки устройств сгруппированные по процессорам (ARMv6 vs ARMv7) | |
| 124 | + | ||
| 125 | + | **Список устройств на ARMv7:** | |
| 126 | + | ||
| 127 | + | - Advent Vega (P10AN01) | |
| 128 | + | - Dell Streak, Streak 7 | |
| 129 | + | - HTC Desire | |
| 130 | + | - HTC Desire Z (T-Mobile G2) | |
| 131 | + | - HTC Desire HD | |
| 132 | + | - HTC Droid Incredible | |
| 133 | + | - HTC EVO 4G, EVO Shift 4G | |
| 134 | + | - HTC Glacier (T-Mobile myTouch 4G) | |
| 135 | + | - HTC Inspire 4G | |
| 136 | + | - HTC Nexus One | |
| 137 | + | - HTC Thunderbolt 4G | |
| 138 | + | - Huawei Ideos S7 | |
| 139 | + | - LG Optimus Z | |
| 140 | + | - Motorola Atrix 4G | |
| 141 | + | - Motorola Bravo | |
| 142 | + | - Motorola Cliq 2 - untested | |
| 143 | + | - Motorola Defy | |
| 144 | + | - Motorola Droid 2, Droid 2 Global | |
| 145 | + | - Motorola Droid Pro (Motorola PRO) | |
| 146 | + | - Motorola Droid X | |
| 147 | + | - Motorola Xoom | |
| 148 | + | - POV Mobii Tegra Tablet | |
| 149 | + | - Samsung Continuum (i400) | |
| 150 | + | - Samsung Galaxy S (i9000, Captivate, Fascinate, Vibrant, Epic 4G) | |
| 151 | + | - Samsung Galaxy Tab | |
| 152 | + | - Sharp IS03 | |
| 153 | + | - Sony Ericsson Xperia X10 | |
| 154 | + | - Toshiba AS100 | |
| 155 | + | - Viewsonic gTablet | |
| 156 | + | - Acer Liquid E | |
| 157 | + | - Acer Liquid (Liquid A1) | |
| 158 | + | - Archos 101 Internet Tablet | |
| 159 | + | - Motorola Charm | |
| 160 | + | - Motorola Droid (Milestone) | |
| 161 | + | - Samsung Galaxy S 4G | |
| 162 | + | - Samsung Nexus S | |
| 163 | + | ||
| 164 | + | **Список устройств на ARMv6:** | |
| 165 | + | ||
| 166 | + | - Android SDK emulator | |
| 167 | + | - Asus Garmin nuvifone A50 (T-Mobile Garminfone) | |
| 168 | + | - Augen GENTouch 78 Tablet | |
| 169 | + | - Coby Kyros Internet Tablet (MID7015) | |
| 170 | + | - Geeksphone One, Geeksphone Zero | |
| 171 | + | - HTC Aria | |
| 172 | + | - HTC ChaCha | |
| 173 | + | - HTC Dream (T-Mobile G1, Android Dev Phone 1) | |
| 174 | + | - HTC Droid Eris | |
| 175 | + | - HTC Espresso (T-Mobile myTouch 3G Slide) | |
| 176 | + | - HTC Hero (T-Mobile G2 Touch) | |
| 177 | + | - HTC Legend | |
| 178 | + | - HTC Magic (T-Mobile myTouch 3G, T-Mobile G1 Touch) | |
| 179 | + | - HTC Salsa | |
| 180 | + | - HTC Tattoo | |
| 181 | + | - HTC Wildfire | |
| 182 | + | - Huawei Ascend | |
| 183 | + | - Huawei Ideos U8150-B (T-Mobile Comet) | |
| 184 | + | - Huawei U8110 (T-Mobile Pulse Mini) | |
| 185 | + | - Huawei U8230 | |
| 186 | + | - LG Ally (Apex) (LG VS740) | |
| 187 | + | - LG GW620 (Eve, InTouch Max, LinkMe) | |
| 188 | + | - LG Optimus, Optimus M, Optimus T, Optimus S, Optimus V | |
| 189 | + | - LG Vortex | |
| 190 | + | - LG P500 | |
| 191 | + | - MAG iMiTO iM7 | |
| 192 | + | - vMAG iMiTO iM7S | |
| 193 | + | - Motorola Backflip | |
| 194 | + | - Motorola Citrus | |
| 195 | + | - Motorola Cliq (MB200) | |
| 196 | + | - Motorola Dext | |
| 197 | + | - Motorola Devour | |
| 198 | + | - Motorola i1 | |
| 199 | + | - Motorola Spice XT300 | |
| 200 | + | - Motorola Quench XT5 XT502 | |
| 201 | + | - Pandigital Novel | |
| 202 | + | - Samsung GT-S5570 Galaxy Mini | |
| 203 | + | - Samsung i5500 Galaxy 5 (Corby) | |
| 204 | + | - Samsung i5700 Galaxy Portal (Spica) | |
| 205 | + | - Samsung i5800 Galaxy 3 | |
| 206 | + | - Samsung i7500 Galaxy | |
| 207 | + | - Samsung Intercept | |
| 208 | + | - Samsung M900 Moment | |
| 209 | + | - Samsung S5830 Galaxy Ace | |
| 210 | + | - Samsung Transform | |
| 211 | + | - Sanyo ZIO M6000 | |
| 212 | + | - Sony Ericsson Xperia X8 | |
| 213 | + | - Sony Ericsson Xperia X10 Mini | |
| 214 | + | - Sony Ericsson Xperia X10 Mini Pro | |
| 215 | + | - Superpad 10.2" Tablet PC | |
| 216 | + | - Viewsonic ViewPad 7 Tablet | |
| 217 | + | - Velocity Micro T103 Cruz tablet | |
| 218 | + | - Vodafone 845 | |
| 219 | + | - ZTE Blade | |
| 220 | + | ||
| 221 | + | ### Воспроизведение Аудио и Видео на телефонах | |
| 222 | + | ||
| 223 | + | Каждый телефон поставляется со своим набором кодеков, поэтому на разных телефонах родной Media Player может воспроизводить разные форматы. Ниже приведена таблица, показывающая, какие форматы воспроизводит Media Player на каждом телефоне: | |
| 224 | + | ||
| 225 | + | | **Телефон** | **Android** | **webm - VP8** | **m4v - H.264** | **ogv - Theora** | **mp4 - H.264** | **mov - H.264** | **avi - RLE** | **mpg - MPEG-1** | **wmv - WM9** | **3gp - MPEG-4** | | |
| 226 | + | |----|----|----|----|----|----|----|----|----|----|----| | |
| 227 | + | | Emulator | 1.6 | x | x | x | x | x | x | x | x | OK | | |
| 228 | + | | Emulator | 2.1 | x | x | x | x | x | x | x | x | OK | | |
| 229 | + | | Nexus One | 2.2 | x | OK | x | OK | x | x | x | x | OK | | |
| 230 | + | | HTC Desire | 1.6 | x | OK | x | OK | x | x | x | OK | OK | | |
| 231 | + | | Toshiba Folio 100 | 2.2 | x | OK | x | OK | x | x | x | OK | OK | | |
| 232 | + | | Xperia X10 | 2.1 | x | OK | x | x | x | x | x | OK | OK | | |
| 233 | + | | Xperia X8 | 2.2 | x | OK | x | x | x | x | x | x | OK | | |
| 234 | + | | HTC Wildfire | 2.1 | x | OK | x | x | x | x | x | x | OK | | |
| 235 | + | | HTC Desire HD | 2.2 | x | OK | x | OK | x | x | x | x | OK | | |
| 236 | + | | Galaxy Tab | 2.2 | x | OK | x | x | x | x | x | x | OK | | |
| 237 | + | | myPhone A210 | 1.6 | x | OK | x | x | x | x | x | x | OK | | |
| 238 | + | | Motorola Milestone | 2.1 | x | OK | x | x | x | x | x | OK | ? | | |
| 239 | + | | Milestone 2 | 2.2 | x | OK | x | x | x | x | x | только звук | OK | | |
| 240 | + | ||
| 241 | + | ## Файловая система Android | |
| 242 | + | ||
| 243 | + | Рекомендуется использовать getApplicationContext().getFilesDir() чтобы получить путь к каталогу для хранения данных приложения. В HTC Wildfire эта функция возвращает /data/data/\<package name\> | |
| 244 | + | ||
| 245 | + | Библиотеки приложения находятся в /data/data/\<package\>/lib | |
| 246 | + | ||
| 247 | + | В папке /data/data/\<package name\> есть разрешение на чтение и запись, можно создавать новые файлы и даже запускать их. | |
| 248 | + | ||
| 249 | + | ## Создание нового Java Приложения для Android | |
| 250 | + | ||
| 251 | + | Эта информация может быть полезна для реализации LCL-CustomDrawn-Android | |
| 252 | + | ||
| 253 | + | Общие инструкции здесь: [Managing Projects from the Command Line](http://developer.android.com/tools/projects/projects-cmdline.html) | |
| 254 | + | ||
| 255 | + | ### Показать / Скрыть виртуальную клавиатуру | |
| 256 | + | ||
| 257 | + | Чтобы показать: | |
| 258 | + | ||
| 259 | + | ``` java | |
| 260 | + | InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); | |
| 261 | + | imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); | |
| 262 | + | ``` | |
| 263 | + | ||
| 264 | + | и чтобы спрятать клавиатуру: | |
| 265 | + | ||
| 266 | + | ``` java | |
| 267 | + | InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); | |
| 268 | + | imm.hideSoftInputFromWindow(singleedittext.getWindowToken(),0); | |
| 269 | + | ``` | |
| 270 | + | ||
| 271 | + | ## Ссылки | |
| 272 | + | ||
| 273 | + | - [Managing Projects from the Command Line](http://developer.android.com/tools/projects/projects-cmdline.html) | |
| 274 | + | - [Show or Hide soft keyboard on opening a dialog or activity in android](http://android-codes-examples.blogspot.com/2011/11/show-or-hide-soft-keyboard-on-opening.html) | |
| 275 | + | ||
| 276 | + | --- | |
| 277 | + | *From the Free Pascal wiki, page "Android Programming/ru", as it stood on 2020-02-09 after a change by GAN, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* | |
| 278 | + | Category: Android/ru | |
| 279 | + | Category: Custom Drawn/ru | |
| 280 | + | Category: Russian |
