Android Game Development Extension örnekleri, uzantının temel özelliklerinin nasıl kullanılacağını gösterir. Bu konuda, örnekler ve bunların çalıştırılması için gereken ayarlar açıklanmaktadır.
Aşağıdaki örnekler indirme sayfasında mevcuttur:
- HelloJNI: Giriş niteliğinde bir projedir.
- Endless-Tunnel: Yalnızca Android için bir projedir.
- Teapot: Windows ve Android için platformlar arası bir projedir.
- AssemblyCode-Link-Objects: derleme kaynak kodu içeren bir şablon projesi.
Başlamadan önce
Android Game Development Extension'ı ve örnekleri yükleyin. Ayrıntılar için hızlı başlangıç kılavuzuna bakın. Bu konuda, örnek oluşturma ve çalıştırma da açıklanmaktadır. Örnek olarak Çaydanlık örneğinin Android sürümü kullanılmaktadır.
Proje yapılandırma kılavuzunda, uzantıyı kullanan bir projenin ayarlarının nasıl yapılandırılacağı (ör. Android platformu ve APK ekleme) açıklanmaktadır.
MerhabaJNI
HelloJNI örneği, bir uygulama penceresinde "JNI'den Merhaba" mesajını gösteren basit bir projedir. Proje, Windows ve Android için farklı bir kaynak kodu grubu kullanır.
- Android kaynak kodu ve Gradle derleme komut dosyası dizini: HelloJNI\AndroidPackaging
- Windows kaynak kodu ve Visual Studio proje dizini: HelloJNI
Projeyi derlediğinizde Visual Studio aşağıdaki ayarları uygulama düzeyindeki build.gradle dosyasına iletir. Gradle derleme komut dosyalarınızı değiştirerek bu ayarları değiştirebilirsiniz.
MSBUILD_NDK_VERSIONMSBUILD_MIN_SDK_VERSIONMSBUILD_JNI_LIBS_SRC_DIRMSBUILD_ANDROID_OUTPUT_APK_NAMEMSBUILD_ANDROID_GRADLE_BUILD_OUTPUT_DIR
Sana Özel özelliğini ayarlamak ve çalıştırmak için:
- Visual Studio'da HelloJNI örneğini açıp derleyin.
- Android arm64-v8a platformu ekleyin. Daha fazla bilgi için Android platformu ekleme başlıklı makaleyi inceleyin.
- Yeni platforma Android APK öğesi ekleyin.
- Projeyi derleyin.
- Aşağıdaki Android platformlarını ekleyin ve ardından her birine bir Android APK öğesi ekleyin: Android-armeabi-v7a, Android-x86 ve Android-x86_64.
- Örneği derleyip çalıştırın.
Endless-Tunnel
Endless-Tunnel örneği, oyuncunun bir tünelin sonuna ulaşmaya çalışırken beyaz küpler topladığı bir Android oyunudur. Bu örnek, GitHub'daki Android NDK deposundaki bir OpenGL örneğinden aktarılmıştır. Örnekte oyunun Windows sürümü sağlanmıyor.
Örnekte ayarları ve Android platformları zaten yapılandırılmış olduğundan, projeyi herhangi bir değişiklik yapmadan Visual Studio'da derleyip çalıştırabilirsiniz. Çözümü açtığınızda Çözüm Gezgini aşağıdaki modülleri gösterir:
- endless-tunnel: Oyun mantığını gösteren uygulama modülü.
- glm: Statik kitaplık olarak oluşturulan OpenGL Math deposunun anlık görüntüsü.
- native_app_glue: NativeActivity nesnesi ile iletişim kuran bir NDK sarmalayıcısı.
Demlik
Çaydanlık örneğinde, OpenGL ES ile oluşturulan ve aşağıdaki özellikleri göstermek için Android Game Development Extension'a aktarılan klasik bir çaydanlık gösterilmektedir:
- Platformlar arası proje geliştirme: Çaydanlık örneğini Windows ve Android için derleyebilirsiniz.
- Özel Android paketleme kullanımı: Gradle derleme komut dosyaları,
Teapot.slndosyasının bulunduğu örneğin kök dizine taşındı. - Address Sanitizer (ASan) ve Hardware Address Sanitizer (HWASan) özelliklerinin nasıl kullanılacağını gösteren özel Android yapılandırmaları.
Çaydanlık örneğinin uygulanması, büyük platformlar arası uygulamalar ve oyunlar için tipik olan birden fazla bölüme ayrılmıştır:
GameApplicationmodülü: Kullanıcı işlemlerini ve uygulama durumlarını (ör. kullanıcının çaydanlığı döndürmesi veya uygulama istatistiklerini güncellemesi) tanımlar.GameEnginemodülü: Temel oluşturma modülünü uygular.
Örneği ayarlamak ve Android'de çalıştırmak için hızlı başlangıç bölümüne bakın. Örneği ayarlamak ve Windows'da çalıştırmak için:
- GLEW'yi yükleme:
- GLEW'yi indirip sıkıştırmasını açın.
- İkili dosyaları
$your-glew-directory\bin\Release\x64'ten%SystemRoot%\system32'a kopyalayın.
- freeglut'ü yükleyin:
- freeglut'u indirip arşivden çıkarın.
$your-freeglut-directory\bin\x86\freeglut.dlldosyasını%SystemRoot%\system32klasörüne kopyalayın.
- freeglut proje bağımlılıkları ekleyin:
- Visual Studio'da
Teapot.slndosyasını açın. - Menüden Hata ayıklama > x64 > Yerel Windows Hata Ayıklama Aracı'nı tıklayın.
- Çözüm Gezgini'nde GameApplication'ı sağ tıklayın ve Özellikler > C/C++ > Genel > Ek Dahil Dizinleri'ni seçin.
$your-freeglut-dir\includedosyasını yola ekleyin.
- Tamam'ı tıklayın.
- Bağlayıcı > Genel > Ek Kitaplık Dizinleri'ni seçin.
$your-freeglut-dir\lib\x64dosyasını yola ekleyin.
- Tamam'ı tıklayın.
- Bağlayıcı > Genel > Ek Kitaplık Dizinleri'ni seçin.
freeglut.libdosyasını yola ekleyin.- Tamam'ı tıklayın.
- Visual Studio'da
- GLEW proje bağımlılıkları ekleyin:
- Çözüm Gezgini bölmesinde GameApplication'ı sağ tıklayın ve Özellikler > C/C++ > Genel > Ek Dahil Dizinleri'ni seçin.
$your-glew-dir\includedosyasını yola ekleyin.- Tamam'ı tıklayın.
- Bağlayıcı > Genel > Ek Kitaplık Dizinleri'ni seçin.
$your-glew-dir\lib\Release\x86dosyasını yola ekleyin.- Tamam'ı tıklayın.
- Bağlayıcı > Genel > Ek Kitaplık Dizinleri'ni seçin.
glew32.libdosyasını yola ekleyin.- Tamam'ı tıklayın.
- Örneği Windows'ta çalıştırma:
- Visual Studio araç çubuğunda Yerel Windows Hata Ayıklama Aracı çalıştırma düğmesini tıklayın.
- Örnek şu şekilde görünmelidir:
AssemblyCode-Link-Objects
Bu, assembly ve C/C++ kaynak kodundan Android yerel kitaplığının nasıl oluşturulacağını gösteren bir şablon projedir. Temel bileşenler şunlardır:
AssemblyCode-Link-Objects: C++ ve assembly kaynak kodundan oluşturulan ana Android yerel kitaplığı.StaticLib:from_static_lib_assembly_code_asişlevini dışa aktaran yardımcı statik kitaplık.
Proje birden fazla mimariyi destekler. Desteklenen her mimarinin, StaticLib'ten dışa aktarılan işlevleri uygulayan kendi kaynak dosyaları vardır.
Yalnızca derlediğiniz platformların derleme kaynak dosyalarını eklemeniz gerekir. Bu proje, özel derleme araçları kullanarak derlemelere montaj dosyaları ekler.
Örneği ayarlamak ve oluşturmak için:
- Visual Studio'da, özel derleme araçlarının derleme dosyaları için yapılandırıldığından emin olun:
- Çözüm Gezgini'nde derleme dosyasını sağ tıklayıp Özellikler'i tıklayın. Bu işlem, dosyanın Özellikler Sayfaları iletişim kutusunu açar.
- Yapılandırmayı ve platformu seçin (ör. Android-arm64-v8a için Tüm yapılandırmalar).
- Genel > Derlemeden hariç tut ayarının Hayır olarak ayarlandığından emin olun.
- Genel > Öğe Türü'nün Özel Derleme Aracı olarak ayarlandığından emin olun.
- Uygulanacak değişiklikler varsa Uygula'yı tıklayın.
- Yapılandırma Özellikleri > Özel Derleme Araçları > Komut Satırı'nın
$(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath)olarak ayarlandığından emin olun. NDK, her CPU mimarisi için ayrı bir derleyici içerir ve$(AsToolExe)doğru derleyiciyle eşlenir. Bu örnekte, hem x86 hem de x86_64 Android projeleri oluşturmak için NDK araç zinciri kullanılır. x86_64 Android platformu için yasm kullanmak istiyorsanız bunun yerine$(YasmToolExe)kullanın. - Yapılandırma Özellikleri > Özel Derleme Araçları > Çıkışlar'ın
$(IntDir)%(FileName).oolarak ayarlandığından emin olun. Bu dize, Komut Satırı ayarına eklenmelidir. - Yapılandırma Özellikleri > Özel Derleme Araçları > Nesneleri Bağla'nın
Yesolarak ayarlandığından emin olun.
Örneğin, Android-arm64-v8a ayarları aşağıdaki ekran görüntüsüne benzer şekilde görünmelidir:
- Projeyi oluşturun. Bu işlem, şu
libAssmeblyCodeLinkObjects.sodosyasını oluşturur:AssemblyCode-Link-Objects.slndosyasını açın.- Menüden Derle > Çözüm Derle'yi tıklayın.
- İşlevlerin Android kitaplığına doğru şekilde aktarıldığını doğrulamak için nm.exe NDK aracını kullanın:
- Komut satırında örnek dizine gidin.
- Derlemeniz tarafından oluşturulan Android kitaplığı konumuna gidin. Varsayılan konum, arm64-v8a platformu için
$sample_dir\$solution_configuration\$solution_platform\$platformve$sample_dir\Debug\Android-arm64-v8a\arm64-v8aile benzerdir. - Aşağıdaki komutu çalıştırarak dışa aktarılan simge bölümünün işlevleri içerdiğini doğrulayın:
…\ndk\toolschains\llvm\prebuilt\windows-x86_64\aarch64-linux-android\bin\nm.exe --defined-only …\Debug\Android-arm64-v8a\arm64-v8a\libAssmeblyCodeLinkObjects.soÇıktıda, aşağıdakileri içeren sembollerin bir listesini görürsünüz:
T from_shared_object_assembly_code_asT from_static_lib_assembly_code_as
PoolAllocator
PoolAllocator örneği, sabit boyutlu blokları çok verimli bir şekilde sağlayan havuz tabanlı bir bellek ayırıcıya sahip bir Android uygulamasıdır.
Ayıraç, belleğin tamamını başlatma sırasında mmap kullanarak önceden ayırır. Ücretsiz bloklar, bağlı liste kullanılarak izlenir. Ardından, bellek ayırma, bağlı listenin başını döndüren hızlı bir O(1) işlemidir ve ayırma işlemi de bloğu bağlı listenin arkasına eklediği için O(1) işlemidir.
Örnekte, HWASan'ı kullanmaya yönelik iki çözüm yapılandırması vardır.
HWASan: Bu yapılandırma, özel bellek ayırıcılarla HWASan'ı kullanmanın en basit yaklaşımını gösterir. Bellek ayırıcının dahili uygulaması, HWASan tarafından otomatik olarak izlenenmalloc/freeçağrılarıyla değiştirilir. Bellek ayırıcı artık havuz tabanlı bir ayırıcı olarak çalışmasa da HWASan, boşaltıldıktan sonra kullanım gibi önemli bellek hatalarını tespit etmenize yardımcı olmaya devam edebilir.HWASan-Advanced: Bu yapılandırma, ayırıcı tarafından kullanılan orijinal ayırma mekanizmasını değiştirmeden HWASan'ın özel bir bellek ayırıcıya nasıl tam olarak entegre edileceğini gösterir. Önceden ayrılmış havuzdaki bellek bloklarını etiketlemek için HWASan etiketleme yöntemlerini kullanır, blok boyutunu HWASan tarafından istenen minimum blok boyutuna yuvarlar ve bloklar havuza geri döndürüldüğünde etiketleri sıfırlar.
Daha basit olduğu ve yaygın bellek hatalarını tespit etmenize yardımcı olabileceği için HWASan yapılandırmasını kullanın. HWASan'ın nasıl çalıştığını anlamak veya HWASan'ı kullanırken bellek ayırıcınızın iç anlamlarını korumak istiyorsanız HWASan-Advanced yapılandırmasının uygulanmasını inceleyin.