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 sahibi olmayı 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 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 harici bağımlılıklara ilişkin referansları içerecek şekilde güncelleyin.BUILD
dosyası oluşturun.- Uygulamayı Bazel ile oluşturun.
- Uygulamayı bir Android emülatöründe veya fiziksel cihazda 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 temel bir Android uygulama projesini kullanın.
Bu uygulamada, tıklandığında karşılama mesajı yazdıran tek bir düğme var:
Ş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/examples
Bu eğitimin örnek projesi examples/android/tutorial
konumundadır. Eğiticinin geri kalanında komutları bu dizinde 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 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 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 WORKSPACE
dosyası bulunan bir dizindir.
WORKSPACE
dosyası boş olabilir veya projenizi derlemek için gereken dış bağımlılıklara referanslar içerebilir.
Öncelikle 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 çalıştırılıyor
Artık şu komutu kullanarak Bazel'in 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'in uygulamayı derlemesi için Android SDK
derleme araçlarını çalıştırması gerekir. Diğer bir deyişle, Bazel'in bunları nerede
bulacağını bilmesi için WORKSPACE
dosyanıza bazı bilgiler eklemeniz gerekir.
WORKSPACE
dosyanıza aşağıdaki satırı ekleyin:
android_sdk_repository(name = "androidsdk")
Bu, Android SDK'yı ANDROID_HOME
ortam değişkeni tarafından başvurulan yolda kullanır ve derleme araçlarının ilgili konumda yüklü olduğu en yüksek API düzeyini ve 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ğ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 ayarları 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) |
path
, api_level
ve build_tools_version
özelliklerini ekleyerek Android SDK'nın mutlak yolunu, API düzeyini ve kullanılacak derleme araçlarının sürümünü de açıkça belirtebilirsiniz. api_level
ve build_tools_version
belirtilmezse android_sdk_repository
kuralı, SDK'da mevcut olan 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 yolu, yani düz eğik çizgi içeren 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ı da indirmeniz ve WORKSPACE
dosyanıza aşağıdaki satırı ekleyerek Bazel'e kodu nerede bulacağını bildirmeniz gerekir:
android_ndk_repository(name = "androidndk")
android_sdk_repository
özelliğine benzer şekilde, Android NDK'nın yolu da varsayılan olarak ANDROID_NDK_HOME
ortam değişkeninden tahmin edilir. Yol, android_ndk_repository
üzerinde path
özelliğiyle açıkça belirtilebilir.
Daha fazla bilgi için Android Native Development Kit'i Bazel ile kullanma başlıklı makaleyi okuyun.
api_level
, SDK ve NDK'nın hedeflediği Android API sürümüdür (ör. Android 6.0 için 23 ve Android 7.1 için 25). Açıkça ayarlanmazsa api_level
, android_sdk_repository
ve android_ndk_repository
için varsayılan olarak mevcut en yüksek API düzeyine ayarlanır.
API düzeylerinin SDK ve NDK için aynı değere ayarlanması gerekmez. Bu sayfada, Android sürümlerinden NDK destekli API düzeylerine kadar olan bir harita bulunmaktadır.
BUILD dosyası oluşturma
BUILD
dosyası, bir derleme çıkışı kümesi (ör. aapt
kaynağından derlenmiş Android kaynakları veya javac
ürününden derlenen sınıf dosyaları) ve 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 başka 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ı, WORKSPACE
'a göre BUILD
dosyasının 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 paketinden oluşur. 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ı bildirim türü içerir. En önemli tür, Bazel'a bir kaynak dosyalar veya diğer bağımlılıklar kümesinden ara veya nihai bir yazılım çıkışının nasıl 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 ilk olarak android_library
kuralını kullanarak Bazel'a uygulama kaynak kodundan ve kaynak dosyalarından bir Android kitaplık modülü oluşturmasını söyleyin. 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 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'in 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 bu adı bağımlı olarak kullanarak 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 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ıda BUILD
dosyasına eklediğiniz greeter_activity
kuralının çıkışına referans verir. Yani Bazel, bu kuralın çıkışını oluştururken önce greeter_activity
kitaplık kuralı çı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.
Şimdi dosyayı kaydedin ve kapatın.
Uygulamayı oluşturma
Uygulamayı derlemeyi deneyin. android_binary
hedefini derlemek için aşağıdaki komutu çalıştırın:
bazel build //src/main:app
build
alt komutu, Bazel'e aşağıdaki hedefi derlemesini söyler. Hedef, BUILD
dosyasındaki bir derleme kuralının adı olarak belirtilir. Bu adla birlikte, çalışma alanı dizininize göre paket yolu da belirtilir. Bu örnekte hedef app
, paket yolu ise //src/main/
şeklindedir.
Komut satırındaki mevcut çalışma dizininize ve hedefin adına bağlı olarak bazen paket yolunu veya hedef adını dahil edebileceğ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, çı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 hem ara hem de son derleme işlemlerinin çıkışlarını, kullanıcı ve çalışma alanı başına çıktı dizini grubuna yerleştirir. Bu dizinler, proje dizininin en üst düzeyindeki aşağıdaki konumlardan birbirine bağlıdır. Burada WORKSPACE
bulunur:
bazel-bin
, yürütülebilir ikili programları ve çalıştırılabilir diğer 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 saklar. Bu dizindeki alt dizin adı src/main
, 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ırın
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üsü'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 çalıştırmadan önce emülatörün çalıştığından emin olun.
Aşağıdakileri girin:
bazel mobile-install //src/main:app
Daha sonra, "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 kısımlarını 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 açık sorunlar
- Mobil yükleme hakkında daha fazla bilgi edinin.
- 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 C ve C++ kodunu Android uygulamanıza entegre etme
- Aşağıdakiler için daha fazla Bazel örnek projesini inceleyin:
İyi çalışmalar.