Not: Android uygulamaları oluşturmak için Bazel'i kullanmayla ilgili bilinen sınırlamalar vardır. Bilinen sorunların listesini görmek için rules_android sorunları 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ışsa da kullanıcılar Android Studio'nun Bazel projelerini resmi olarak desteklemediğinin farkında olmalıdır.
Bu eğitimde, Bazel kullanarak basit bir Android uygulamasının nasıl oluşturulacağı açıklanmaktadır.
Bazel, Android kuralları kullanılarak Android uygulamaları oluşturulmasını 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 herhangi bir 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.bazel
dosyası içeren bir Bazel çalışma alanı oluşturun. MODULE.bazel
dosyasını, Android SDK gibi gerekli harici bağımlılıklara referans içerecek şekilde güncelleyin.BUILD
dosyası oluşturun.- Uygulamayı Bazel ile oluşturun.
- Uygulamayı bir Android emülatörüne veya fiziksel cihaza dağıtıp çalıştırın.
Başlamadan önce
Bazel'i yükleme
Eğiticiye 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
git
simgesini kullanın.
Örnek projeyi alma
Örnek proje için Bazel'in örnekler deposundaki eğitici Android uygulaması projesini kullanın.
Bu uygulamada, tıklandığında selamlama yazdıran tek bir düğme var:
1.şekil Android uygulama düğmesiyle selamlama.
git
ile depoyu klonlayın (veya ZIP dosyasını doğrudan indirin):
git clone https://github.com/bazelbuild/examples
Bu eğitimdeki örnek proje examples/android/tutorial
konumunda yer alır. 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 dizininde MODULE.bazel
dosyası bulunan bir dizindir.
MODULE.bazel
dosyası boş olabilir veya projenizi oluşturmak için gereken harici bağımlılıklarla ilgili 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 şekilde çalışıp çalışmadığını şu komutla kontrol edebilirsiniz:
bazel info workspace
Bazel, mevcut dizinin yolunu yazdırıyorsa hazırsınız demektir. MODULE.bazel
dosyası yoksa şu gibi bir hata mesajı görebilirsiniz:
ERROR: The 'info' command is only supported from within a workspace.
Android SDK ile entegrasyon
Bazel'in uygulamayı oluşturmak için Android SDK derleme araçlarını çalıştırması gerekir. Bu nedenle, Bazel'in bu araçları 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.6.6")
remote_android_extensions = use_extension(
"@rules_android//bzlmod_extensions:android_extensions.bzl",
"remote_android_tools_extensions")
use_repo(remote_android_extensions, "android_tools")
android_sdk_repository_extension = use_extension("@rules_android//rules/android_sdk_repository:rule.bzl", "android_sdk_repository_extension")
use_repo(android_sdk_repository_extension, "androidsdk")
Bu işlem, ANDROID_HOME
ortam değişkeni tarafından referans verilen yoldaki Android SDK'sını kullanır ve 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 algılar.
ANDROID_HOME
değişkenini Android SDK'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ğini varsayarsak 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. 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) |
İsteğe bağlı: Yerel kodu Android uygulamanızda derlemek istiyorsanız Android
NDK'yı da indirmeniz ve MODULE.bazel
dosyanıza aşağıdaki satırı ekleyerek rules_android_ndk
kullanmanız gerekir:
bazel_dep(name = "rules_android_ndk", version = "0.1.3")
Daha fazla bilgi için Android Native Development Kit'i Bazel ile Kullanma başlıklı makaleyi okuyun.
SDK ve NDK için API düzeylerinin aynı değere ayarlanması gerekmez. Bu sayfada, Android sürümlerinden NDK tarafından desteklenen API düzeylerine kadar olan bir harita yer alır.
BUILD dosyası oluşturma
BUILD
dosyası, aapt
'den derlenen Android kaynakları veya javac
'den 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ılıklar, çalışma alanınızdaki kaynak dosyalar (Java, C++) veya diğer derleme çıktıları olabilir. BUILD
dosyaları, Starlark adlı bir dilde yazılır.
BUILD
dosyaları, Bazel'deki paket hiyerarşisi olarak bilinen bir kavramın parçasıdır.
Paket hiyerarşisi, çalışma alanınızdaki dizin yapısını kaplayan mantıksal bir yapıdır. Her paket, ilgili bir kaynak dosyaları kümesini ve bir BUILD
dosyasını 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.
Dizinler aynı şekilde düzenlenmiş olsa da Bazel'in paket hiyerarşisinin, BUILD
dosyasının bulunduğu Android uygulama dizininizin Java paket hiyerarşisinden kavramsal olarak farklı olduğunu unutmayın.
Bu eğitimdeki basit Android uygulaması için src/main/
kaynak dosyaları tek bir Bazel paketinden oluşur. Daha karmaşık bir projede iç içe yerleştirilmiş birçok paket olabilir.
android_library kuralı ekleme
Bir BUILD
dosyası, Bazel için çeşitli bildirim türleri içerir. En önemli tür, Bazel'e bir dizi kaynak dosyadan veya diğer bağımlılıklardan ara ya da nihai bir yazılım çıktısı oluşturmayı 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, ilk olarak android_library
kuralını kullanarak Bazel'e uygulama kaynak kodu ve kaynak dosyalarından Android kitaplığı modülü oluşturmasını söyleyeceksiniz. Ardından, Bazel'e Android uygulama paketinin nasıl oluşturulacağı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 bildirin:
src/main/java/com/example/bazel/BUILD
:
load("@rules_android//rules:rules.bzl", "android_library")
package(
default_visibility = ["//src:__subpackages__"],
)
android_library(
name = "greeter_activity",
srcs = [
"Greeter.java",
"MainActivity.java",
],
manifest = "AndroidManifest.xml",
resource_files = glob(["res/**"]),
)
android_library
Oluşturma kuralı, Bazel'in kaynak dosyalarından bir 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ı kullanarak kurala referans vereceksiniz.
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 bildirin:
src/main/BUILD
:
load("@rules_android//rules:rules.bzl", "android_binary")
android_binary(
name = "app",
manifest = "//src/main/java/com/example/bazel: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ışına referans veriyor. Bu, Bazel bu kuralın çıkışını oluşturduğunda ilk olarak greeter_activity
kitaplık kuralının çıkışının oluşturulup oluşturulmadığını ve güncel olup olmadığını kontrol ettiği anlamına gelir. Aksi takdirde Bazel, dosyayı oluşturur ve ardından uygulama paketi dosyasını oluşturmak için bu çıktıyı kullanır.
Şimdi dosyayı kaydedip 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'e hedefi oluşturmasını söyler. Hedef, BUILD
dosyasındaki bir derleme kuralının adı olarak belirtilir. Bu ad, çalışma alanınızın dizinine göre paket yoluyla birlikte kullanılır. Bu örnekte hedef app
, paket yolu ise //src/main/
'dir.
Komut satırındaki mevcut çalışma dizininize ve hedefin adına bağlı olarak bazen paket yolunu veya hedef adını atlayabileceğinizi unutmayın. Hedef etiketler ve yollar hakkında daha fazla bilgi için Etiketler başlıklı makaleyi inceleyin.
Bazel, örnek uygulamayı oluşturmaya başlar. Derleme işlemi sırasında çıktısı aşağıdaki gibi 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 çıktılarını bulma
Bazel, hem ara hem de son derleme işlemlerinin çıktılarını kullanıcı başına, çalışma alanı başına bir dizi çıktı dizinine yerleştirir. Bu dizinler, MODULE.bazel
dosyasının bulunduğu proje dizininin üst düzeyindeki aşağıdaki konumlardan sembolik olarak bağlanır:
bazel-bin
, ikili yürütülebilir dosyaları ve çalıştırılabilir diğer derleme çıktılarını depolar.bazel-genfiles
Bazel kuralları tarafından oluşturulan ara kaynak dosyalarını depolarbazel-out
diğer derleme çıkışlarını depolar
Bazel, android_binary
kuralı kullanılarak oluşturulan Android .apk
dosyasını bazel-bin/src/main
dizininde saklar. Burada 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
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 bölümündeki talimatları uygulayarak cihazınızı adb
kullanacak şekilde ayarlamanız gerekir. Uygulamayı Android Studio'da bulunan 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 \
--mode=skylark \
--mobile_install_aspect=@rules_android//mobile_install:mi.bzl \
--mobile_install_supported_rules=android_binary \
--java_runtime_version=17 \
--java_language_version=17 \
--tool_java_runtime_version=17 \
--tool_java_language_version=17
Mobil yükleme için gereken ek işaretlerin projenizin bazelrc dosyasına eklenebileceğini unutmayın. Mobil yüklemeye özgü işaretler
(--mode
, --mobile_install*
), Bazel 8.4.0 ve sonraki sürümlerde artık gerekli olmayacak. Dil ve çalışma zamanı sürümü için çeşitli Java işaretleri, çalışma alanınızın Java yapılandırmasına bağlı olarak gerekebilir.
Mobil yükleme alt araçları için dil ve çalışma zamanı düzeyinin 17 veya daha yüksek olması gerekir.
"Bazel Tutorial App" artık otomatik olarak yüklenip başlatılmalıdır:
Şekil 2. Bazel eğitim uygulaması.
Tebrikler! İlk Bazel ile oluşturulmuş Android uygulamanızı yüklediniz.
Daha fazla bilgi
Daha fazla bilgi için şu sayfalara bakın:
- rules_android GitHub'daki açık sorunlar
- 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 testleri çalıştırın.
- NDK ile C ve C++ kodunu Android uygulamanıza entegre etme
- Aşağıdaki alanlarda daha fazla Bazel örnek projesi görün:
İyi inşa etmeler!