Bu eğiticide, Bazel kullanılarak basit bir Android uygulamasının nasıl oluşturulacağı açıklanmaktadır.
Bazel, Android kurallarını kullanarak Android uygulamaları oluşturmayı destekler.
Bu eğitim Windows, macOS ve Linux kullanıcıları için tasarlanmıştır ve Bazel veya Android uygulaması geliştirme konusunda deneyim gerektirmez. Bu eğiticide herhangi bir Android kodu yazmanıza gerek yoktur.
Neler öğreneceksiniz?
Bu eğitimde şunları öğreneceksiniz:
- Bazel ve Android Studio'yu yükleyip örnek projeyi indirerek ortamınızı ayarlayın.
- Uygulamanın kaynak kodunu içeren bir Bazel çalışma alanı ve çalışma alanı dizininin en üst düzeyini tanımlayan bir
WORKSPACE
dosyası oluşturun. WORKSPACE
dosyasını, Android SDK gibi gerekli dış bağımlılıklara referanslar içerecek şekilde güncelleyin.BUILD
dosyası oluşturun.- Uygulamayı Bazel ile oluşturun.
- Uygulamayı bir Android emülatörde veya fiziksel cihazda dağıtıp çalıştırın.
Başlamadan önce
Bazel'ı yükle
Eğitime başlamadan önce aşağıdaki yazılımı yükleyin:
- Bazel. Yüklemek için yükleme talimatlarını uygulayın.
- Android Studio. Yüklemek için Android Studio'yu indirme adımlarını uygulayın. SDK'yı indirmek ve ortamınızı yapılandırmak için kurulum sihirbazını çalıştırın.
- (İsteğe bağlı) Git. Android uygulama projesini indirmek için
git
uygulamasını kullanın.
Örnek projeyi alma
Örnek proje için Bazel'in örnekler deposunda temel bir Android uygulama projesini kullanın.
Bu uygulamanın, tıklandığında selamlama yazdıran tek bir düğmesi vardır:
Şekil 1. Android uygulaması düğmesi karşılama mesajı.
Depoyu git
ile klonlayın (veya ZIP dosyasını doğrudan indirin):
git clone https://github.com/bazelbuild/examples
Bu eğitim için örnek proje examples/android/tutorial
dilinde. Eğiticinin geri kalanında bu dizinde komut çalıştıracaksınız.
Kaynak dosyaları inceleyin
Uygulamanın kaynak dosyalarına göz atın.
.
├── README.md
└── src
└── main
├── AndroidManifest.xml
└── java
└── com
└── example
└── bazel
├── AndroidManifest.xml
├── Greeter.java
├── MainActivity.java
└── res
├── layout
│ └── activity_main.xml
└── values
├── colors.xml
└── strings.xml
Önemli dosya ve dizinler şunlardır:
Ad | Konum |
---|---|
Android manifest dosyaları | src/main/AndroidManifest.xml ve src/main/java/com/example/bazel/AndroidManifest.xml |
Android kaynak dosyaları | src/main/java/com/example/bazel/MainActivity.java ve Greeter.java |
Kaynak dosya dizini | src/main/java/com/example/bazel/res/ |
Bazel ile geliştirme
Çalışma alanını ayarlama
Çalışma alanı, bir veya daha fazla yazılım projesinin kaynak dosyalarını içeren ve kök dizininde WORKSPACE
dosyası bulunan bir dizindir.
WORKSPACE
dosyası boş olabilir veya projenizi oluşturmak için gereken harici bağımlılıklara referanslar içerebilir.
İlk olarak, boş bir WORKSPACE
dosyası oluşturmak için aşağıdaki komutu çalıştırın:
OS | Komut |
---|---|
Linux, macOS | touch WORKSPACE |
Windows (Komut İstemi) | type nul > WORKSPACE |
Windows (PowerShell) | New-Item WORKSPACE -ItemType file |
Bazel Koşu
Artık şu komutu kullanarak Bazel'ın düzgün çalışıp çalışmadığını kontrol edebilirsiniz:
bazel info workspace
Bazel geçerli dizinin yolunu yazdırırsa, devam edebilirsiniz! WORKSPACE
dosyası mevcut değilse şuna benzer bir hata mesajı görebilirsiniz:
ERROR: The 'info' command is only supported from within a workspace.
Android SDK ile entegrasyon
Bazel'ın uygulamayı oluşturmak için Android SDK
oluşturma araçlarını
çalıştırması gerekiyor. Diğer bir deyişle, Bazel'ın bu öğeleri nerede bulacağını bilmesi için WORKSPACE
dosyanıza bazı bilgiler eklemeniz gerekiyor.
WORKSPACE
dosyanıza şu satırı ekleyin:
android_sdk_repository(name = "androidsdk")
Bu işlem, ANDROID_HOME
ortam değişkeni tarafından referans verilen yoldaki Android SDK'sını kullanıp bu konumda yüklü olan en yüksek API düzeyini ve derleme araçlarının en son sürümünü otomatik olarak tespit eder.
ANDROID_HOME
değişkenini Android SDK'sının konumuna ayarlayabilirsiniz. Android Studio'nun SDK Yöneticisi'ni kullanarak yüklü SDK'nın yolunu bulun.
SDK'nın varsayılan konumlara yüklendiği varsayıldığında ANDROID_HOME
değişkenini ayarlamak için aşağıdaki komutları kullanabilirsiniz:
OS | Komut |
---|---|
Linux | export ANDROID_HOME=$HOME/Android/Sdk/ |
macOS | export ANDROID_HOME=$HOME/Library/Android/sdk |
Windows (Komut İstemi) | set ANDROID_HOME=%LOCALAPPDATA%\Android\Sdk |
Windows (PowerShell) | $env:ANDROID_HOME="$env:LOCALAPPDATA\Android\Sdk" |
Yukarıdaki komutlar, değişkeni yalnızca geçerli kabuk oturumu için ayarlar. Bunları kalıcı hale getirmek için aşağıdaki komutları çalıştırın:
OS | Komut |
---|---|
Linux | echo "export ANDROID_HOME=$HOME/Android/Sdk/" >> ~/.bashrc |
macOS | echo "export ANDROID_HOME=$HOME/Library/Android/Sdk/" >> ~/.bashrc |
Windows (Komut İstemi) | setx ANDROID_HOME "%LOCALAPPDATA%\Android\Sdk" |
Windows (PowerShell) | [System.Environment]::SetEnvironmentVariable('ANDROID_HOME', "$env:LOCALAPPDATA\Android\Sdk", [System.EnvironmentVariableTarget]::User) |
Ayrıca path
, api_level
ve build_tools_version
özelliklerini ekleyerek Android SDK'nın mutlak yolunu, API düzeyini ve kullanılacak derleme araçları sürümünü de açıkça belirtebilirsiniz. api_level
ve build_tools_version
belirtilmezse android_sdk_repository
kuralı SDK'da ilgili en son sürümü kullanır. SDK'da mevcut oldukları sürece bu özelliklerin herhangi bir kombinasyonunu belirtebilirsiniz. Örneğin:
android_sdk_repository(
name = "androidsdk",
path = "/path/to/Android/sdk",
api_level = 25,
build_tools_version = "30.0.3"
)
Windows'da, path
özelliğinin karma stilde bir yolu (öne eğik çizgili bir Windows yolunu) kullanması gerektiğini unutmayın:
android_sdk_repository(
name = "androidsdk",
path = "c:/path/to/Android/sdk",
)
İsteğe bağlı: Android uygulamanızda yerel kod derlemek istiyorsanız Android NDK'yı indirmeniz ve aşağıdaki satırı WORKSPACE
dosyanıza ekleyerek Bazel'a bunu nerede bulacağını bildirmeniz gerekir:
android_ndk_repository(name = "androidndk")
android_sdk_repository
yöntemine benzer şekilde, Android NDK yolu varsayılan olarak ANDROID_NDK_HOME
ortam değişkeninden belirlenir. Yol, android_ndk_repository
üzerinde bir path
özelliğiyle açıkça belirtilebilir.
Daha fazla bilgi için Bazel ile Android Yerel Geliştirme Kiti'ni kullanma konusunu okuyun.
api_level
, SDK ve NDK'nın hedeflediği Android API sürümüdür. Örneğin, Android 6.0 için 23 ve Android 7.1 için 25. Açıkça belirtilmediği takdirde api_level
, android_sdk_repository
ve android_ndk_repository
için varsayılan olarak mevcut en yüksek API düzeyini ayarlar.
API düzeylerinin SDK ve NDK için aynı değere ayarlanmasına gerek yoktur. Bu sayfada, Android sürümlerinden NDK destekli API düzeylerine kadar bir harita mevcuttur.
BUILD dosyası oluşturma
BUILD
dosyası, aapt
hizmetinden derlenmiş Android kaynakları veya javac
paketindeki sınıf dosyaları gibi bir dizi derleme çıkışı ile bunların bağımlılıkları arasındaki ilişkiyi açıklar. Bu bağımlılıklar, çalışma alanınızdaki kaynak dosyalar (Java, C++) veya diğer derleme çıkışları olabilir. BUILD
dosyaları
Starlark adında bir dilde yazılmıştır.
BUILD
dosyaları, Bazel'de paket hiyerarşisi olarak bilinen bir kavramın parçasıdır.
Paket hiyerarşisi, çalışma alanınızdaki dizin yapısının üzerine yerleştiren mantıksal bir yapıdır. Her paket, ilgili bir kaynak dosya grubunu ve bir BUILD
dosyasını içeren bir dizindir (ve alt dizinleridir). Paket, kendi BUILD
dosyalarını içerenler dışındaki tüm alt dizinleri de içerir. Paket adı, BUILD
dosyasının WORKSPACE
ile göreli yoludur.
Dizinler aynı şekilde organize edilebilse de Bazel'in paket hiyerarşisinin, BUILD
dosyasının bulunduğu Android App dizininizin Java paket hiyerarşisinden kavramsal olarak farklı olduğunu unutmayın.
Bu eğitimdeki basit Android uygulaması için src/main/
içindeki kaynak dosyalar tek bir Bazel paketi içerir. Daha karmaşık projelerde iç içe yerleştirilmiş çok sayıda paket olabilir.
android_library kuralı ekle
Bir BUILD
dosyası, Bazel için birkaç farklı bildirim türü içeriyor. En önemli tür, Bazel'a bir dizi kaynak dosyadan veya diğer bağımlılıklardan nasıl ara ya da nihai yazılım çıktısı oluşturulacağını anlatan oluşturma kuralıdır. Bazel, bir Android uygulaması oluşturmak için kullanabileceğiniz iki derleme kuralı (android_library
ve android_binary
) sağlar.
Bu eğitimde önce android_library
kuralını kullanarak Bazel'a uygulama kaynak kodundan ve kaynak dosyalarından Android kitaplığı modülü oluşturmasını söyleyin. Ardından, android_binary
kuralını kullanarak Bazel'a Android uygulama paketini nasıl derleyeceğini söylersiniz.
src/main/java/com/example/bazel
dizininde yeni bir BUILD
dosyası oluşturun ve yeni bir android_library
hedefi bildirin:
src/main/java/com/example/bazel/BUILD
:
package(
default_visibility = ["//src:__subpackages__"],
)
android_library(
name = "greeter_activity",
srcs = [
"Greeter.java",
"MainActivity.java",
],
manifest = "AndroidManifest.xml",
resource_files = glob(["res/**"]),
)
android_library
derleme kuralı, Bazel'ın kaynak dosyalardan kitaplık modülü oluşturmak için ihtiyaç duyduğu bilgileri belirten bir dizi özellik içerir.
Kuralın adının greeter_activity
olduğunu da unutmayın. android_binary
kuralında bağımlılık olarak bu adı kullanan kurala referans verirsiniz.
android_binary kuralı ekleyin
android_binary
kuralı, uygulamanız için Android uygulama paketini (.apk
dosyası) oluşturur.
src/main/
dizininde yeni bir BUILD
dosyası oluşturun ve yeni bir android_binary
hedefi bildirin:
src/main/BUILD
:
android_binary(
name = "app",
manifest = "AndroidManifest.xml",
deps = ["//src/main/java/com/example/bazel:greeter_activity"],
)
Burada deps
özelliği, yukarıdaki BUILD
dosyasına eklediğiniz greeter_activity
kuralının çıkışını referans alır. Yani, Bazel bu kuralın çıkışını oluştururken önce greeter_activity
kitaplık kuralının çıktısının derlenip oluşturulmadığını ve güncel olup olmadığını kontrol eder. Aksi takdirde, Bazel uygulamayı oluşturur ve bu çıktıyı kullanarak uygulama paketi dosyasını oluşturur.
Şimdi dosyayı kaydedin ve kapatın.
Uygulamayı oluşturma
Uygulamayı oluşturmayı deneyin. android_binary
hedefini oluşturmak için aşağıdaki komutu çalıştırın:
bazel build //src/main:app
build
alt komutu, Bazel'a takip eden hedefi oluşturma talimatı verir. Hedef, BUILD
dosyası içindeki bir derleme kuralının adı ve çalışma alanı dizininize göre paket yolu olarak belirtilir. Bu örnekte, hedef app
ve paket yolu //src/main/
şeklindedir.
Komut satırındaki geçerli çalışma dizininize ve hedefin adına bağlı olarak, bazen paket yolunu veya hedef adını çıkarabileceğinizi unutmayın. Hedef etiketler ve yollar hakkında daha fazla bilgi için Etiketler başlıklı makaleyi inceleyin.
Bazel, örnek uygulamayı derlemeye başlar. Derleme işlemi sırasında, uygulamanın çıkışı aşağıdakine benzer şekilde görünür:
INFO: Analysed target //src/main:app (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //src/main:app up-to-date:
bazel-bin/src/main/app_deploy.jar
bazel-bin/src/main/app_unsigned.apk
bazel-bin/src/main/app.apk
Derleme çıkışlarını bulma
Bazel, ara ve son derleme işlemlerinin çıktılarını, kullanıcı ve çalışma alanı başına çıkış dizinlerine yerleştirir. Bu dizinler, proje dizininin en üst düzeyinde bulunan aşağıdaki konumlarla eş zamanlıdır. Burada WORKSPACE
:
bazel-bin
, yürütülebilir ikili dosyaları ve diğer çalıştırılabilir derleme çıkışlarını depolarbazel-genfiles
, Bazel kuralları tarafından oluşturulan aracı kaynak dosyalarını depolarbazel-out
diğer derleme çıkışı türlerini depolar
Bazel, android_binary
kuralı kullanılarak oluşturulan Android .apk
dosyasını bazel-bin/src/main
dizininde depolar. Bu dizinde src/main
alt dizin adı, Bazel paketinin adından türetilir.
Bir komut isteminde bu dizinin içeriğini listeleyin ve app.apk
dosyasını bulun:
OS | Komut |
---|---|
Linux, macOS | ls bazel-bin/src/main |
Windows (Komut İstemi) | dir bazel-bin\src\main |
Windows (PowerShell) | ls bazel-bin\src\main |
Uygulamayı çalıştırma
Artık bazel
mobile-install
komutunu kullanarak komut satırından uygulamayı bağlı bir Android cihaza veya emülatöre dağıtabilirsiniz. Bu komut, cihazla iletişim kurmak için Android Debug Bridge'i (adb
) kullanır. Dağıtımdan önce Android Hata Ayıklama Köprü'deki talimatları uygulayarak cihazınızı adb
kullanacak şekilde ayarlamanız gerekir. Uygulamayı, Android Studio'daki Android emülatörüne de yükleyebilirsiniz. Aşağıdaki komutu yürütmeden önce emülatörün çalıştığından emin olun.
Aşağıdakileri girin:
bazel mobile-install //src/main:app
Daha sonra, "Bazel Tutorial App"i (Bazel Eğitim Uygulaması) bulun ve başlatın:
2. Şekil. Bazel eğitim uygulaması.
Tebrikler! Bazel tarafından geliştirilen ilk Android uygulamanızı az önce yüklediniz.
mobile-install
alt komutunun, uygulamanın yalnızca son dağıtımdan bu yana değişen söz konusu bölümlerini dağıtmak için kullanılabilen --incremental
işaretini de desteklediğini unutmayın.
Ayrıca, uygulamanın yüklendikten hemen sonra başlatılması için --start_app
işaretini de destekler.
Daha fazla bilgi
Daha fazla ayrıntı için şu sayfalara bakın:
- GitHub'da sorunları açma
- Mobil yükleme hakkında daha fazla bilgi
- rules_jvm_external parametresini kullanarak Maven depolarındaki AppCompat, Guava ve JUnit gibi harici bağımlılıkları entegre edin
- robolectric-bazel entegrasyonuyla Robofactric testleri gerçekleştirin.
- Uygulamanızı Android araç testleriyle test etme
- NDK ile C ve C++ kodunu Android uygulamanıza entegre etme
- Aşağıdakilerle ilgili diğer Bazel örnek projelerini inceleyin:
Kolay gelsin!