Başlamadan önce
Bu kılavuzda, dijital ortamda yerleşik olarak bulunan kavramları zaten bildiğiniz varsayılarak yerel programlama ve Android geliştirme.
Giriş
Bu bölümde, NDK'nın nasıl çalıştığı hakkında ileri düzey bir açıklama sunulmaktadır. Android NDK, araçları sayesinde Android uygulamalarınıza C veya C++ ("yerel kod") yerleştirebilirsiniz. Bir projeyi Android uygulamalarındaki yerel kod, özellikle şunlardan en az birini yapmak isteyen geliştiriciler için yararlı olabilir: şu:
- Uygulamalarını platformlar arasında taşımalıdır.
- Mevcut kitaplıkları yeniden kullanın veya yeniden kullanım için kendi kitaplıklarını sağlayın.
- Özellikle yoğun işlem gerektiren belirli durumlarda performansı artırır. oyunlar için de geçerlidir.
İşleyiş şekli
Bu bölümde, yerel reklam oluştururken kullanılan ana bileşenler açıklanmaktadır ve Android için uygulama oluşturma ve oluşturma sürecini çok önemlidir.
Ana bileşenler
Projenizi oluştururken aşağıdaki bileşenleri iyice anlamış olmalısınız: uygulama:
Yerel paylaşılan kitaplıklar: NDK, bu kitaplıkları veya
.so
dosyalarını C/C++ kaynak kodunuza gider.Yerel statik kitaplıklar: NDK ayrıca statik kitaplıklar da oluşturabilir veya
.a
diğer kitaplıklara bağlayabileceğiniz dosyalar.Java Native Interface (JNI): JNI, Java ve programlamanın üzerinden C++ bileşenleri birbirleriyle iletişim kurar. Bu kılavuzda JNI hakkında bilgi sahibi olduğu varsayılır; hakkında bilgi için Java Yerel Arayüz Spesifikasyonu'na bakın.
Uygulama İkili Arabirimi (ABI): ABI, uygulamanızın özelliklerinin tam olarak nasıl makine kodunun çalışma zamanında sistemle etkileşime geçmesi beklenir. NDK bu tanımlara göre
.so
dosyası oluşturur. Farklı ABI'ler NDK, 32 bit ARM, AArch64, x86 ve x86-64. Daha fazla bilgi için Android ABI'ler.Manifest: Java bileşeni olmayan bir uygulama yazıyorsanız NativeActivity sınıfını manifest dosyası olarak kaydedin. Bkz. Native_activity.h arayüzünü ziyaret ederek bunu nasıl yapacağınızla ilgili daha fazla bilgi edinebilirsiniz.
Akma
Android için yerel uygulama geliştirmeye ilişkin genel akış aşağıdaki gibidir:
Uygulamanızı tasarlayın, Java'da hangi bölümlerin uygulanacağına ve hangi bölümlerin uygulanacağına karar verin yerel kod olarak uygulanacak.
Diğer Android projelerinde yaptığınız gibi bir Android uygulaması projesi oluşturun.
Yalnızca yerel uygulama yazıyorsanız NativeActivity sınıfını şurada bildirin:
AndroidManifest.xml
. Daha fazla bilgi için Yerel etkinlikler ve uygulamalar.Yerel kitaplığı açıklayan bir
Android.mk
dosyası oluşturun. Bu dosya, dosyanın adı ve "JNI" içinde derlenecek flag'ler, bağlı kitaplıklar ve kaynak dosyaları dizin.İsteğe bağlı olarak, hedefi yapılandıran bir
Application.mk
dosyası oluşturabilirsiniz ABI'ler, araç zinciri, yayınlama/hata ayıklama modu ve STL. Bunlardan herhangi biri için belirtilmezse sırasıyla aşağıdaki varsayılan değerler kullanılır:- ABI: kullanımdan kaldırılmamış tüm ABI'lar
- Mod: Bırak
- STL: sistem
Yerel kaynağınızı projenin
jni
dizinine yerleştirin.Yerel (
.so
,.a
) kitaplıkları derlemek için ndk-build'i kullanın.Yürütülebilir
.dex
dosyasını üreten Java bileşenini derleyin.Her şeyi
.so
,.dex
ve diğer öğeleri içeren bir APK dosyasında paketle uygulamanızın çalışması için gereken dosyalar.
Yerel etkinlikler ve uygulamalar
Android SDK'sı, şunları yapmanızı sağlayan bir yardımcı sınıf olan NativeActivity'yi sağlar.
tamamen yerel bir etkinlik yazmanız gerekir. NativeActivity, iletişimi yönetir
yerel kodunuz arasında gidip gelir. Böylece,
veya yöntemlerini çağırabilir. Tek yapmanız gereken başvurunuzu beyan etmek
AndroidManifest.xml
dosyanızda yerel olmasını sağlayın ve yerel dosyanızı oluşturmaya başlayın
bir uygulamadır.
NativeActivity kullanan bir Android uygulaması, kendi sanal makinesinde çalışmaya devam ediyor. diğer uygulamalardan korumalı alana alın. Bu nedenle, JNI aracılığıyla Android çerçevesi API'leri Örneğin, sensörler için NDK, kullanabileceğiniz yerel arayüzler sağlar. ya da JNI'yi kullanarak arama yapmak zorunda kalmazsınız. Bu tür iletişimler için desteği için Yerel API'ler bölümüne bakın.
Yerel bir etkinlik geliştiriyor olsanız da olmasanız da, geleneksel Android geliştirme araçlarıyla oluşturduğunuzu göstereceğim. İşlem devam ediyor Android uygulamalarının doğru tarayıcıyla derlenmesini ve paketlenmesini inceleyeceğiz.
Android NDK, yerel etkinliğinizi uygulamanız için size iki seçenek sunar:
- native_activity.h başlığı NativeActivity sınıfının yerel sürümünü tanımlar. Belge, yerel reklam öğenizi oluşturmak için ihtiyacınız olan geri çağırma arayüzü ve veri yapıları etkinliği'ne dokunun. Uygulamanızın ana iş parçacığı geri çağırmaları yaptığından, geri çağırma uygulamalarınız engellenmemelidir. Kullanıcılar sizi engellerse ana iş parçacığınız geri arama geri gelene kadar yanıt vermez.
android_native_app_glue.h
dosyası, native_activity.h arayüzünün üst kısmında. Daha fazla iş parçacığının Bir etkinlik döngüsündeki geri çağırma veya giriş etkinlikleri gibi işlemleri gerçekleştirir. Hareket halinde veya başka bir ileti dizisine geri çağırmak, geri çağırmaların iş parçacığı.
<ndk_root>/sources/android/native_app_glue/android_native_app_glue.c
kaynağı da mevcuttur ve uygulamayı değiştirmenize olanak tanır.
Bu statik kitaplığın nasıl kullanılacağıyla ilgili daha fazla bilgi için
yerel etkinlik örnek uygulaması ve belgeleri. Daha fazla bilgi:
buradaki yorumlar bölümünde de
<ndk_root>/sources/android/native_app_glue/android_native_app_glue.h
.
dosyası olarak kaydedebilirsiniz.
Native_activity.h arayüzünü kullanma
native_activity.h arayüzüyle yerel bir etkinlik uygulamak için:
Projenizin kök dizininde bir
jni/
dizini oluşturun. Bu dizin yerel kodunuzun tamamını depolar.AndroidManifest.xml
dosyasında yerel etkinliğinizi tanımlayın.Uygulamanızda Java kodu olmadığından
android:hasCode
değerinifalse
olarak ayarlayın.<application android:label="@string/app_name" android:hasCode="false">
Etkinlik etiketinin
android:name
özelliğini NativeActivity.<activity android:name="android.app.NativeActivity" android:label="@string/app_name">
meta-data
etiketininandroid:value
özelliği uygulamaya giriş noktasını içeren paylaşılan kitaplık (örneğin, C/C++main
),lib
öneki ve.so
son eki kitaplıktan çıkarılır dokunun.<manifest> <application> <activity> <meta-data android:name="android.app.lib_name" android:value="native-activity" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Yerel etkinliğiniz için bir dosya oluşturun ve ANativeActivity_onCreate değişkeni. yerel etkinlik başlar. C/C++ işlevindeki
main
işlevine benzer şekilde bu işlev, işlev işaretçileri içeren bir ANativeActivity yapısının işaretçisi geri çağırma uygulamalarına göz atalım. Ayarlayın:ANativeActivity->callbacks
içindeki geçerli geri çağırma işlevi işaretçileri uygulama süreci hakkında bilgi edineceksiniz.ANativeActivity->instance
alanını verileri seçin.Başlangıçta etkinliğinizin yapmasını istediğiniz diğer şeyleri uygulayın.
ANativeActivity->callbacks
Geri çağırmaların ne zaman Etkinlik Yaşam Döngüsü'nü Yönetme bölümünü inceleyin.Uygulamanızın geri kalanını geliştirin.
Aşağıdaki işlemler için projenizin
jni/
dizininde birAndroid.mk file
oluşturun: yerel modülünüzü derleme sistemine açıklayın. Daha fazla bilgi için bkz. Android.mk.Android.mk dosyanız olduğunda,
ndk-build
komutudur.cd <path>/<to>/<project> $NDK/ndk-build
Android projenizi her zamanki gibi derleyip yükleyin. Yerel kodunuz
jni/
dizinini seçerseniz derleme komut dosyası.so
öğesini otomatik olarak paketler dosyalardan derlemenizi sağlar.
Ek örnek kod
NDK örneklerini indirmek için NDK Örnekleri bölümüne bakın.