Android SDK ve Emülatör Kurulumu

Cem Topkaya
9 min readOct 7, 2018

Hedefimiz en alt seviyeden Android uygulamalarımızı deneyebileceğimiz sanal makineleri emulator sayesinde ayaklandırmak. Şunun gibi bir sanal aygıtı bilgisayarımızda ayaklandıracağız:

Sanal makinemiz içinde uygulamamızı görebilmek için ya Android Studio kurarak hem JDK(Java SE Development Kit) hem Android SDK ve Android Emulator kurmuş olursunuz.

Veya Android SDK’yı elle kurmalıyız(elle kurup android paketlerini yüklemeliyiz).

Öncelikle yüklenmiş olduğunda Android SDK klasörünün yapısını nasıl görürüz bir bakalım daha sonra bu klasörü sıfırdan oluşturarak nasıl çalışmak istediğimiz API’leri indirebileceğimizi görelim:

Şu an sadece boş olan Android klasörünün birazdan içinde yaratılacak klasörlerden bizim için gerekli olanlarının tanımlarına bakalım:

c:\Android
\tools <Android SDK Tools>
"tools" klasörü, SDK araçlarını içerir. SDKMANAGER ile SDK paketleri indirmemizi sağlar. AVDMANAGER komut satırında Android Virtual Machine oluşturmamızı ve yönetmemizi sağlar. JOBB ile uygulamalarımızın APK dosyalarını şifrelemiz mümkün olur.
\platform-tools <Android SDK Platform Tools>
"platform-tools" klasörü,her yeni android sürümünde yeni özellikleri destekleyecek şekilde güncellenir. İçeriğiden adb, etc1tool, fastboot ve logcat gibi uygulamaları bulundurur.
\build-tools <Android SDK Build Tools>
Doğal olarak Android SDK'nın bir bileşenidir. Android uygulamalarını build edebilmek için gerekli araçları içerir ve güncel tutulması gerekir. Android Gradle plugini sayesinde build etme işleminde bağımlılıkları eş zamanlı olarak yükleyebiliriz.Belirli bir build-tools versiyonunda çalışabilmesi için build.gradle dosyasında buildToolsVersion "28.0.3" tanımlaması yapmak gerekir.
\system-images
Android SDK Yöneticisi ile kullanılabilen Android system imajları, Android Linux çekirdeği, yerel kütüphaneler, Dalvik VM ve çeşitli Android paketleri (Android çerçevesi ve önceden yüklenmiş uygulamalar gibi) için kod içerir.
\platforms
Android platformu API'lerini barındırır. Bu API'lerin yapısında temel olarak:
- Temel bir paket kümesi ve sınıflar
- Bir manifest dosyasının bildirilmesi için gerekli XML element ve nitelikler kümesi
- Kaynakların bildirilmesi ve kaynaklara erişilmesi için gerekli XML element ve öznitelikler kümesi
- Intent'lerden oluşan bir küme
- Uygulamaların yapabileceği talepler için izinleri

Zip dosyasını C:\Android klasörüne açtığımızda sadece tools klasörünü yaratmış olacağız. Ancak tools klasörü sadece SDK yönetimiyle ilgili uygulamaları barındırıyor. Bize uygulama geliştireceğimiz, emulator veya fiziksel araca yükleyip hata gidereceğimiz diğer uygulamalar da gerekecek. Tüm paketleri detaylarıyla( --verbose) görüntülemek için sdkmanager --list --verbose komutunu çalştırabiliriz. Biz sadece “platforms” grubundakilerini görütüleyelim.

grep ile sadece platforms API’lerini listeleyelim

c:\Android\tools\bin içindeki sdkmanager.bat dosyasına 26 sürümünün sdk’sını indirmesini söyleyelim.

sdkmanager “platform-tools” “platforms;android-26”

Lisansı kabul ettikten sonra kurulum tamamlanacak ve Android klasörüne bakarak değişimleri görebiliriz.

Directory of C:\Android07.10.2018  09:27    <DIR>          .
07.10.2018 09:27 <DIR> ..
07.10.2018 09:26 16 .knownPackages
07.10.2018 09:26 <DIR> licenses
07.10.2018 09:27 <DIR> platform-tools
07.10.2018 09:28 <DIR> platforms
07.10.2018 08:53 <DIR> tools

Sadece Android içinde tools klasörümüz vardı ancak şimdi platformlarımızı tutan “platforms” klasörü ve içine 26 numaralı olan API gelmiş.

Directory of C:\Android\platforms07.10.2018  09:28    <DIR>          .
07.10.2018 09:28 <DIR> ..
07.10.2018 09:28 <DIR> android-26

Ayrıca platform araçlarıda “platform-tools” klasörü yaratılarak içine yazılmış.

Directory of C:\Android\platform-tools07.10.2018  09:27    <DIR>          .
07.10.2018 09:27 <DIR> ..
07.10.2018 09:26 1.868.800 adb.exe
07.10.2018 09:26 97.792 AdbWinApi.dll
07.10.2018 09:26 62.976 AdbWinUsbApi.dll
07.10.2018 09:26 <DIR> api
07.10.2018 09:26 152.576 dmtracedump.exe
07.10.2018 09:26 326.656 etc1tool.exe
07.10.2018 09:26 840.704 fastboot.exe
07.10.2018 09:26 41.472 hprof-conv.exe
07.10.2018 09:26 <DIR> lib64
07.10.2018 09:26 208.577 libwinpthread-1.dll
07.10.2018 09:26 319.488 make_f2fs.exe
07.10.2018 09:26 1.170 mke2fs.conf
07.10.2018 09:26 986.112 mke2fs.exe
07.10.2018 09:26 386.778 NOTICE.txt
07.10.2018 09:27 17.208 package.xml
07.10.2018 09:26 38 source.properties
07.10.2018 09:26 1.251.840 sqlite3.exe
07.10.2018 09:27 <DIR> systrace

adb (Android Debug Bridge)

Android Hata Ayıklama Köprüsü (adb), bir emülatör örneğinin veya Android tabanlı cihazın durumunu yönetmenize olanak veren çok yönlü bir araçtır. APK yüklediğiniz(emulator veya gerçek cihaz) arasında debug işlemlerinizi yapabilmeniz için kullanabilirsiniz.

etc1tool

PNG uzantılı resim dosyalarını ETC1 dosyalarına ve tersine dönüştürmek için kullanılan bir encode/decode aracı

logcat

Sistem ve uygulama loglarını görüntülemek için adb aracının tetiklediği araç.

Android Gradle Plugin

Tipik bir Android uygulama modülünün oluşturulma süreci.
Android SDK araçları

Listeden 28 API’yi ve sistem yansılarını indirelim

API 28 de indirilsin.
Klasör yapımızda son durum

Uygulama geliştirmek için 28 numaralı API’yi indirdik ancak uygulamamızı koşturmak için bir sanal Android makinesi oluşturmamız yani android cihazı emule(taklit) etmemiz için system-image indirmemiz gerekiyor.

tools\bin\sdkmanager.bat “system-images” “system-images;android-28;google_apis;x86”
Emulator paketini kuralım
Emulator kurulduktan sonra klasör yapısı
Olmayan bir imaj için virtual device oluşturmak istediğimizde yüklenmiş system-images bilgilerini gösterecek
Emulator ile bir Virtual Device yaratıyoruz ve binlerce soruya cevap veriyoruz

İşte o sorular:

lenovo@DESKTOP-TDG2P1H C:\Android\tools\bin
$ avdmanager.bat create avd --name CemTest -k system-images;android-28;google_apis;x86
Auto-selecting single ABI x86===========] 100% Fetch remote repository...
Do you wish to create a custom hardware profile? [no] yes
PlayStore: Does the device supports Google Play?
PlayStore.enabled [no]:no
Name of the AVD being run:
avd.name [<build>]:avd_adı
Cache partition support: Whether we use a /cache partition on the device.
disk.cachePartition [yes]:
Cache partition: Cache partition to use on the device. Ignored if disk.cachePartition is not 'yes'.
disk.cachePartition.path []:
Cache partition size:
disk.cachePartition.size [66MB]:
Initial data partition: If not empty, its content will be copied to the disk.dataPartition.path file at boot-time.
disk.dataPartition.initPath []:
Path to data partition file: Path to data partition file. Cannot be empty. Special value <temp> means using a temporary file. If disk.dataPartition.initPath is not empty, its content will be copied to the disk.dataPartition.path file at boot-time.
disk.dataPartition.path [<temp>]:
Ideal size of data partition:
disk.dataPartition.size [0]:
Path to encryption key partition file: Path to encryption key partition file. Should be at least 16K bytes empty disk without any filesystem on it.
disk.encryptionKeyPartition.path []:
Path to the ramdisk image: Path to the ramdisk image.
disk.ramdisk.path []:
Path to snapshot storage: Path to a 'snapshot storage' file, where all snapshots are stored.
disk.snapStorage.path []:
Initial system partition image:
disk.systemPartition.initPath []:
Path to runtime system partition image:
disk.systemPartition.path []:
Ideal size of system partition:
disk.systemPartition.size [0]:
Initial vendor partition image:
disk.vendorPartition.initPath []:
Path to runtime vendor partition image:
disk.vendorPartition.path []:
Ideal size of vendor partition:
disk.vendorPartition.size [0]:
Always use cold boot: If set, AVD will always use the full cold boot instead of snapshot-based quick boot process
fastboot.forceColdBoot [no]:
Accelerometer: Whether there is an accelerometer in the device.
hw.accelerometer [yes]:
Chrome OS device (App Runtime for Chrome): The emulated device is a Chrome OS machine.
hw.arc [no]:
Auto login for Chrome OS devices: Used to enable auto login into Chrome OS devices
hw.arc.autologin [no]:
Audio recording support: Whether the device can record audio
hw.audioInput [yes]:
Audio playback support: Whether the device can play audio
hw.audioOutput [yes]:
Battery support: Whether the device can run on a battery.
hw.battery [yes]:
Configures camera facing back: Must be 'emulated' for a fake camera, 'webcam<N>' for a web camera, or 'none' if back camera is disabled.
hw.camera.back [emulated]:
Configures camera facing front: Must be 'emulated' for a fake camera, 'webcam<N>' for a web camera, or 'none' if front camera is disabled.
hw.camera.front [none]:
CPU Architecture: The CPU Architecture to emulator
hw.cpu.arch [arm]:
CPU model: The CPU model (QEMU-specific string)
hw.cpu.model []:
SMP CPU core count: Number of cores in a simulated SMP CPU.
hw.cpu.ncore [2]:
DPad support: Whether the device has DPad keys
hw.dPad [yes]:
GPS support: Whether there is a GPS in the device.
hw.gps [yes]:
GPU on-blacklist mode: This value determines if the GPU is considered blacklisted. Testing purposes only.
hw.gpu.blacklisted [no]:
GPU emulation: Enable/Disable emulated OpenGLES GPU
hw.gpu.enabled [no]:
GPU emulation mode: This value determines how GPU emulation is implemented.
hw.gpu.mode [auto]:
GSM modem support: Whether there is a GSM modem in the device.
hw.gsmModem [yes]:
Gyroscope: Whether there is a gyroscope in the device.
hw.gyroscope [yes]:
Initial screen orientation: Setup initial screen orientation, can be rotated later on.
hw.initialOrientation [portrait]:
Keyboard support: Whether the device has a QWERTY keyboard.
hw.keyboard [no]:
Keyboard charmap name: Name of the system keyboard charmap file.
hw.keyboard.charmap [qwerty2]:
Keyboard lid support: Whether the QWERTY keyboard can be opened/closed.
hw.keyboard.lid [yes]:
LCD backlight: Enable/Disable LCD backlight simulation,yes-enabled,no-disabled.
hw.lcd.backlight [yes]:
Abstracted LCD density: A value used to roughly describe the density of the LCD screen for automatic resource/asset selection.
hw.lcd.density [160]:
LCD color depth: Color bit depth of emulated framebuffer.
hw.lcd.depth [16]:
LCD pixel height:
hw.lcd.height [640]:
LCD pixel width:
hw.lcd.width [320]:
Logcat Output File Path:
hw.logcatOutput.path []:
Hardware Back/Home keys: Whether there are hardware back/home keys on the device.
hw.mainKeys [yes]:
Device ram size: The amount of physical RAM on the device, in megabytes.
hw.ramSize [0]:
Rotary input support: Whether the device has rotary input
hw.rotaryInput [no]:
Touch screen type: Defines type of the screen.
hw.screen [multi-touch]:
SD Card support: Whether the device supports insertion/removal of virtual SD Cards.
hw.sdCard [yes]:
SD Card image path:
hw.sdCard.path []:
Uncalibrated gyroscope support: Provides uncalibrated gyroscope sensor values.
hw.sensors.gyroscope_uncalibrated [yes]:
Humidity support: Whether there is a relative humidity sensor in the device
hw.sensors.humidity [yes]:
Light support: Whether there is a light sensor in the device
hw.sensors.light [yes]:
Magnetic field support: Provides magnetic field sensor values.
hw.sensors.magnetic_field [yes]:
Uncalibrated magnetic field suport: Provides uncalibrated magnetic field sensor values.
hw.sensors.magnetic_field_uncalibrated [yes]:
Orientation support: Provides orientation sensor values.
hw.sensors.orientation [yes]:
Pressure support: Whether there is a pressure sensor in the device
hw.sensors.pressure [yes]:
Proximity support: Whether there is an proximity in the device.
hw.sensors.proximity [yes]:
Temperature support: Provides temperature sensor values.
hw.sensors.temperature [yes]:
Track-ball support: Whether there is a trackball on the device.
hw.trackBall [yes]:
Deprecated option. Ignored.: Used to specify the Ext4 partition image type. This is now autodetected.
hw.useext4 [yes]:
Does the kernel require a new device naming scheme?: Used to specify whether the kernel requires a new device naming scheme. Typically for Linux 3.10 and above.
kernel.newDeviceNaming [autodetect]:
kernel boot parameters string.:
kernel.parameters []:
Path to the kernel image: Path to the kernel image.
kernel.path []:
Does the kernel supports YAFFS2 partitions?: Used to specify whether the kernel supports YAFFS2 partition images. Typically before 3.10 only.
kernel.supportsYaffs2 [autodetect]:
Quit emulator after guest boots completely, or after time out. Default: end of universe.:
test.quitAfterBootTimeOut [-1]:
Max VM application heap size: The maximum heap size a Dalvik application might allocate before being killed by the system. Value is in megabytes.
vm.heapSize [0]:
Oluşturulan avd nerede görmek için avdmanager list komutunu çalıştırıyoruz
emulator\emulator.exe -list-avds
intelhaxm-android.exe dosyasına ihtiyaç var. Extraların altından indirilmeli.
sdkmanager.bat --list | grep -i “extras.*intel.*”
sdkmanager “extras;intel;Hardware_Accelerated_Execution_Manager”

Artık c:\Android klasörü içinde birde extras klasörü var. Intel işlemciler için donanım hızlandırıcısını sağlayacak yazılımın kurulması gerekiyor ama bunu BIOS üstünde onaylamış olmamız gerekiyor. Yani sanallaştırmayı Enable etmek sonra bu indirdiklerimiz içinde HAXM kurulumunu çalıştırmanız gerekiyor. Tüm bunların sonunda tekrar emulatör ile sanal makineyi çalıştırdığınızda istediğiniz sonuca ulaşmış olacaksınız.

Ta taaammmm

Son olarak sanal cihazımızı ndizindeki durumunu görelim:

Ortam Değişkenleri (Environment Variables)

Nihayetindeen müsait olan diskim olan D içine taşıyınca her şeyi ortam değişkenlerini buna göre düzenliyor oldum. Android Studio kurulduğunda sanal makineleri

%UserProfile%\{kullanici}\.android

dizininde yer alacağı için android studio içinde kolay ulaşabilmek için ANDROID_AVD_HOME anahtarını oluşturuyoruz.

Baktınız Android SDK’yı manuel kurmak zor oluyor. Hemen Android Studio kurup aşağıdaki gibi Tools>SDK Manager ve açılan pencerede Edit bağlantısına tıkladıktan sonra ileri tuşlarıyla eksik parçaları kurabilirsiniz.

Kaynaklar

--

--

Cem Topkaya

Evlat, kardeş, ağabey, eş, baba, müzik sever, öğrenmek ister, paylaşmaya can atar, iyi biri olmaya çalışır, hakkı geçenlerden helallik ister vs.