يقدّم NDK دعمًا رسميًا لكل من ndk-build وCMake. ينبغي لمعظم المستخدمين فارجع إلى أحد تلك الأدلة لإنشاء رمز التطبيق. إن الغرض من يتناول هذا المستند كيفية إنشاء رمز برمجي حالي يستخدم والأنظمة المختلفة. ويحدث هذا الأمر غالبًا مع تبعيات الطرف الثالث التي لا الخاصة بنظام التشغيل Android، مثل OpenSSL وlibbzip2.
أدوات صيانة أنظمة التشغيل الذين يتطلعون إلى إضافة دعم NDK أصلي إلى تصميمهم يجب أن تقرأ الأنظمة دليل صيانة نظام الإنشاء بدلاً من ذلك.
نظرة عامة
يمكن استخدام المحول البرمجي Clang في NDK بأقل قدر من الإعداد المطلوبة لتحديد البيئة المستهدفة.
للتأكد من قيامك بالإنشاء للبنية الصحيحة، اجتز الاختبار
الاستهداف باستخدام -target
عند استدعاء Clang. على سبيل المثال، التجميع لنظام 64 بت
عليك إجراء ما يلي من معالِج Android ARM مع minSdkVersion
من 21:
$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/clang++ \
--target aarch64-linux-android21 foo.cpp
بدلاً من ذلك، هناك نقاط دخول لها بادئات استهداف للغة Clang. قد تكون هذه
روابط رمزية أو نصوص برمجية تعيد التوجيه إلى رنين، اعتمادًا على إصدار NDK
ومضيف نظام التشغيل. سيكون استدعاء لغة Clang مباشرةً مع --target
أكثر موثوقية،
الذي يمثل سير العمل الأكثر اختبارًا، وتتوفر في بعض الأحيان إعادة توجيه الوسيطات
الأخطاء في البرامج النصية. على نظام التشغيل Windows، يجب توفير CreateProcess
إضافي لإعادة التوجيه.
من النص البرمجي إلى المحول الفعلي
تأثير سلبي على سرعة الإصدار.
$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/aarch64-linux-android21-clang++ \
foo.cpp
في كلتا الحالتين، استبدِل $NDK
بالمسار إلى NDK و$HOST_TAG
لمطابقة.
NDK الذي قمت بتنزيله وفقًا للجدول التالي:
صيغة نظام التشغيل NDK | علامة المضيف |
---|---|
نظام التشغيل Mac | darwin-x86_64 |
نظام التشغيل Linux | linux-x86_64 |
Windows 64 بت | windows-x86_64 |
تنسيق البادئة أو الوسيطة المستهدفة هنا هو الثلاثي المستهدف مع
لاحقة تشير إلى minSdkVersion
. تُستخدم هذه اللاحقة فقط مع
clang/clang++; لا تتطلب أدوات binutils (مثل ar
وstrip
)
اللاحقة لأنها لا تتأثر بـ minSdkVersion
. متوافقة مع Android
والثلاثيات المستهدفة هي كما يلي:
ABI | بلوغ القاعدة الثالثة |
---|---|
armeabi-v7a | armv7a-linux-androideabi |
Arm64-v8a | aarch64-linux-android |
×86 | i686-linux-android |
X86- 64 | x86_64-linux-android |
للعديد من المشروعات من المتوقع أن تتوقع نصوص إنشاء النصوص البرمجية التجميعية
المشتركة بنمط GCC حيث
يستهدف برنامج التحويل البرمجي مجموعة واحدة فقط من أنظمة التشغيل/البنية، ولذلك قد لا يتعامل مع
-target
نظيف. وفي هذه الحالات، يمكنك عادةً تضمين -target
.
الوسيطة كجزء من تعريف برنامج التحويل البرمجي (مثل CC="clang -target
aarch64-linux-android21
). في حالات نادرة، عندما يكون نظام التصميم الذي تستخدمه
لا يستطيع استخدام هذا النموذج، استخدم برامج Clang الثنائية ذات البادئات الثلاثية.
اجتماع تلقائي
تتيح لك مشاريع مؤتمر Autoconf تحديد سلسلة الأدوات المطلوب استخدامها مع البيئة.
المتغيرات. على سبيل المثال، يوضح ما يلي كيفية إنشاء libpng
لنظام Android.
x86-64 مع المستوى 21 من واجهة برمجة التطبيقات minSdkVersion
، على نظام التشغيل Linux.
# Check out the source. git clone https://github.com/glennrp/libpng -b v1.6.37 cd libpng
# Only choose one of these, depending on your build machine... export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64 export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
# Only choose one of these, depending on your device... export TARGET=aarch64-linux-android export TARGET=armv7a-linux-androideabi export TARGET=i686-linux-android export TARGET=x86_64-linux-android
# Set this to your minSdkVersion. export API=21
# Configure and build. export AR=$TOOLCHAIN/bin/llvm-ar export CC="$TOOLCHAIN/bin/clang --target=$TARGET$API" export AS=$CC export CXX="$TOOLCHAIN/bin/clang++ --target=$TARGET$API" export LD=$TOOLCHAIN/bin/ld export RANLIB=$TOOLCHAIN/bin/llvm-ranlib export STRIP=$TOOLCHAIN/bin/llvm-strip ./configure --host $TARGET make
الأدوات المحددة في هذا النموذج صحيحة للإصدار NDK r22 والإصدارات الأحدث. NDK أقدم أدوات مختلفة.
مشاريع إنشاء غير مُضمنة تلقائيًا
تسمح بعض مشروعات makefile بالتجميع المتقاطع عن طريق تجاوز نفس المتغيرات
التي ستفعلها مع مشروع مؤتمر تلقائي. على سبيل المثال، يوضح ما يلي كيف
لإصدار libbzip2
للتوافق مع الإصدار x86-64 من Android مع minSdkVersion
من 21.
# Check out the source.
git clone https://gitlab.com/bzip/bzip2.git
cd bzip2
# Only choose one of these, depending on your build machine...
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
# Only choose one of these, depending on your device...
export TARGET=aarch64-linux-android
export TARGET=armv7a-linux-androideabi
export TARGET=i686-linux-android
export TARGET=x86_64-linux-android
# Set this to your minSdkVersion.
export API=21
# Build.
make \
CC="$TOOLCHAIN/bin/clang --target=$TARGET$API" \
AR=$TOOLCHAIN/bin/llvm-ar \
RANLIB=$TOOLCHAIN/bin/llvm-ranlib \
bzip2
الأدوات المحددة في هذا النموذج صحيحة للإصدار NDK r22 والإصدارات الأحدث. NDK أقدم أدوات مختلفة.