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