Not: Android uygulamaları oluşturmak için Bazel'in kullanımıyla ilgili bilinen sınırlamalar vardır. Bilinen sorunların listesini görmek için GitHub'daki team-Android hotlist sayfasını ziyaret edin. Bazel ekibi ve açık kaynak yazılım (OSS) katkıda bulunanları bilinen sorunları gidermek için aktif olarak çalışırken kullanıcılar, Android Studio'nun Bazel projelerini resmi olarak desteklemediğini bilmelidir.
Bu eğitimde, Bazel kullanılarak basit bir Android uygulamasının nasıl oluşturulacağı açıklanmaktadır.
Bazel, Android kuralları kullanılarak Android uygulamaları oluşturmayı destekler.
Bu eğitim, Windows, macOS ve Linux kullanıcıları için hazırlanmıştır ve Bazel veya Android uygulama geliştirme konusunda deneyim gerektirmez. Bu eğitimde Android kodu yazmanız gerekmez.
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 ve çalışma alanı dizininin en üst düzeyini tanımlayan bir
MODULE.bazeldosyası içeren bir Bazel çalışma alanı oluşturun. MODULE.bazeldosyasını, Android SDK'sı gibi gerekli harici bağımlılıklara referanslar içerecek şekilde güncelleyin.BUILDdosyası oluşturun.- Uygulamayı Bazel ile derleyin.
- Uygulamayı bir Android emülatöründe veya fiziksel cihazda dağıtın ve çalıştırın.
Başlamadan önce
Bazel'i yükleme
Eğitime başlamadan önce aşağıdaki yazılımları 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
gitsimgesini kullanın.
Örnek projeyi alma
Örnek proje için Bazel'in örnekler deposundaki temel bir Android uygulama projesini kullanın.
Bu uygulamada, tıklandığında bir karşılama mesajı yazdıran tek bir düğme vardır:

Şekil 1. Android uygulama düğmesi karşılama mesajı.
Depoyu git ile klonlayın (veya ZIP dosyasını doğrudan indirin):
git clone https://github.com/bazelbuild/examplesBu eğitim için örnek proje examples/android/tutorial adresindedir. Eğitimin geri kalanında bu dizinde komutlar yürüteceksiniz.
Kaynak dosyaları inceleme
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 dosyalar 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 dosyası dizini | src/main/java/com/example/bazel/res/ |
Bazel ile derleme
Çalışma alanını ayarlama
Çalışma alanı, bir veya daha fazla yazılım projesinin kaynak dosyalarını içeren ve kökünde MODULE.bazel dosyası bulunan bir dizindir.
MODULE.bazel dosyası boş olabilir veya projenizi derlemek için gereken harici bağımlılıklara referanslar içerebilir.
Öncelikle, boş bir MODULE.bazel dosyası oluşturmak için aşağıdaki komutu çalıştırın:
| OS | Komut |
|---|---|
| Linux, macOS | touch MODULE.bazel |
| Windows (Komut İstemi) | type nul > MODULE.bazel |
| Windows (PowerShell) | New-Item MODULE.bazel -ItemType file |
Bazel'i çalıştırma
Artık Bazel'in doğru çalışıp çalışmadığını şu komutla kontrol edebilirsiniz:
bazel info workspaceBazel, mevcut dizinin yolunu yazdıysa hazırsınız demektir. MODULE.bazel dosyası mevcut değilse aşağıdaki gibi bir hata mesajı görebilirsiniz:
ERROR: The 'info' command is only supported from within a workspace.
Android SDK'sıyla entegrasyon
Bazel'in uygulamayı derlemek için Android SDK derleme araçlarını çalıştırması gerekir. Bu nedenle, Bazel'in bu bilgileri nerede bulacağını bilmesi için MODULE.bazel dosyanıza bazı bilgiler eklemeniz gerekir.
MODULE.bazel dosyanıza aşağıdaki satırı ekleyin:
bazel_dep(name = "rules_android", version = "0.5.1")
Bu durumda, ANDROID_HOME ortam değişkeninin referans verdiği yoldaki Android SDK'sı kullanılır ve bu konumda yüklü olan derleme araçlarının en yüksek API düzeyi ve en son sürümü otomatik olarak algılanır.
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ılarak 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 mevcut kabuk oturumu için ayarlar. Bu değişiklikleri 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) |
İsteğe bağlı: Android uygulamanıza yerel kod derlemek istiyorsanız Android NDK'yı da indirmeniz ve MODULE.bazel dosyanıza aşağıdaki satırı ekleyerek rules_android_ndk'i kullanmanız gerekir:
bazel_dep(name = "rules_android_ndk", version = "0.1.2")
Daha fazla bilgi için Android Native Development Kit'i Bazel ile kullanma başlıklı makaleyi okuyun.
API düzeylerinin SDK ve NDK için aynı değere ayarlanması gerekmez. Bu sayfada, Android sürümlerinden NDK tarafından desteklenen API düzeylerine giden bir harita yer alır.
BUILD dosyası oluşturma
BUILD dosyası, aapt kaynaklı derlenmiş Android kaynakları veya javac kaynaklı sınıf dosyaları gibi bir dizi derleme çıktısı ile bunların bağımlılıkları arasındaki ilişkiyi açıklar. Bu bağımlılar, çalışma alanınızdaki kaynak dosyalar (Java, C++) veya diğer derleme çıkışları olabilir. BUILD dosyaları Starlark adlı bir dilde yazılı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 binen mantıksal bir yapıdır. Her paket, ilgili bir kaynak dosya grubu ve bir BUILD dosyası içeren bir dizindir (ve alt dizinleri). Paket, kendi BUILD dosyasını içerenler hariç tüm alt dizinleri de içerir. Paket adı, BUILD dosyasının MODULE.bazel dosyasına göreli yoludur.
Bazel'in paket hiyerarşisinin, BUILD dosyasının bulunduğu Android uygulama dizininizin Java paket hiyerarşisindeki kavramsal olarak farklı olduğunu unutmayın. Ancak dizinler aynı şekilde düzenlenmiş olabilir.
Bu eğitimdeki basit Android uygulaması için src/main/ içindeki kaynak dosyalar tek bir Bazel paketini içerir. Daha karmaşık bir projede birçok iç içe yerleştirilmiş paket bulunabilir.
android_library kuralı ekleme
BUILD dosyası, Bazel için birkaç farklı türde beyan içerir. En önemli tür, Bazel'e bir kaynak dosya grubu veya diğer bağımlılıklardan nasıl bir ara veya nihai yazılım çıkışı oluşturulacağını söyleyen derleme kuralı'dır. Bazel, Android uygulaması oluşturmak için kullanabileceğiniz iki derleme kuralı (android_library ve android_binary) sağlar.
Bu eğitimde, Bazel'e uygulama kaynak kodundan ve kaynak dosyalarından Android kitaplık modülü oluşturmasını söylemek için önce android_library kuralını kullanacaksınız. Ardından, Bazel'e Android uygulama paketini nasıl oluşturacağını bildirmek için android_binary kuralını kullanırsınız.
src/main/java/com/example/bazel dizininde yeni bir BUILD dosyası oluşturun ve yeni bir android_library hedefi tanımlayın:
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'in kaynak dosyalardan kitaplık modülü oluşturmak için ihtiyaç duyduğu bilgileri belirten bir özellik grubu içerir.
Kuralın adının greeter_activity olduğunu da unutmayın. android_binary kuralında bu adı bağımlı olarak kullanarak kurala referans verirsiniz.
android_binary kuralı ekleme
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 tanımlayın:
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 çıktısına referans verir. Yani Bazel bu kuralın çıktısını oluştururken önce greeter_activity kitaplık kuralının çıktısının oluşturulup oluşturulmadığını ve güncel olup olmadığını kontrol eder. Aksi takdirde Bazel, derlemeyi yapar ve ardından uygulama paketi dosyasını derlemek için bu çıktıyı kullanır.
Ardından dosyayı kaydedip kapatın.
Uygulamayı oluşturma
Uygulamayı derlemeyi deneyin. android_binary hedefini oluşturmak için aşağıdaki komutu çalıştırın:
bazel build //src/main:appbuild alt komutu, Bazel'e aşağıdaki hedefi derlemesini söyler. Hedef, BUILD dosyasındaki bir derleme kuralının adı olarak, çalışma alanı dizininize göre paket yolu ile birlikte belirtilir. Bu örnekte hedef app, paket yolu ise //src/main/'dur.
Komut satırındaki mevcut ç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 şuna benzer bir çıkış gösterilir:
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, hem ara hem de nihai derleme işlemlerinin çıktılarını kullanıcı ve çalışma alanı başına bir dizi çıkış dizinine yerleştirir. Bu dizinlerin sembolik bağlantıları, MODULE.bazel dosyasının bulunduğu proje dizininin üst düzeyindeki aşağıdaki konumlardan oluşturulur:
bazel-bin, ikili yürütülebilir dosyaları ve diğer çalıştırılabilir derleme çıkışlarını depolarbazel-genfiles, Bazel kuralları tarafından oluşturulan ara 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 saklar. Bu dizindeki alt dizin adı src/main, Bazel paketinin adından türetilir.
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 uygulamayı komut satırından 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 Debug Bridge'deki talimatları uygulayarak cihazınızı adb kullanacak şekilde ayarlamanız gerekir. Uygulamayı Android Studio'ya dahil olan Android emülatörüne de yükleyebilirsiniz. Aşağıdaki komutu yürütmeden önce emülatörünün çalıştığından emin olun.
Aşağıdakileri girin:
bazel mobile-install //src/main:appArdından "Bazel Eğitim Uygulaması"nı bulup başlatın:

Şekil 2. Bazel eğitim uygulaması.
Tebrikler! İlk Bazel ile oluşturulmuş Android uygulamanızı yüklediniz.
mobile-install alt komutunun, uygulamanın yalnızca son dağıtımdan bu yana değişen bölümlerini dağıtmak için kullanılabilen --incremental işaretini de desteklediğini unutmayın.
Ayrıca, uygulamayı yüklendikten hemen sonra başlatmak için --start_app işaretini de destekler.
Daha fazla bilgi
Daha fazla bilgi için şu sayfalara bakın:
- GitHub'da sorun kaydı açın
- mobile-install hakkında daha fazla bilgi
- rules_jvm_external kullanarak Maven depolarından AppCompat, Guava ve JUnit gibi harici bağımlılıkları entegre edin
- robolectric-bazel entegrasyonuyla Robolectric testlerini çalıştırın.
- Uygulamanızı Android enstrümantasyon testleriyle test etme
- NDK ile Android uygulamanıza C ve C++ kodu entegre etme
- Aşağıdakiler için daha fazla Bazel örnek projesini inceleyin:
İyi çalışmalar.