تحتوي اتفاقية عدم الإفشاء على الدعم الرسمي لـ ndk-build وCMake. وعلى معظم المستخدمين الرجوع إلى أحد هذه الأدلة لإنشاء رمز التطبيق. يهدف هذا المستند إلى توضيح كيفية إنشاء رمز حالي يستخدم أنظمة إصدار أخرى. وغالبًا ما يكون ذلك هو الحال مع الموارد التابعة التابعة لجهات خارجية والتي لا تتعلّق بنظام التشغيل Android، مثل OpenSSL وlibbzip2.
عليك بدلاً من ذلك الاطّلاع على دليل إنشاء نظام إدارة النظام الخاص بـ "مطوّري أنظمة الإنشاء" الذين يريدون إضافة التوافق مع نظام NDK الأصلي إلى أنظمة الإنشاء الخاصة بهم.
نظرة عامة
يمكن استخدام برنامج التجميع CND في NDK مع الحدّ الأدنى من الإعدادات المطلوبة لتحديد البيئة المستهدفة.
للتأكد من أنك تُنشئ البنية الأساسية الصحيحة، يمكنك إما تمرير الهدف المناسب باستخدام -target
عند استدعاء Clang، أو استدعاء Clang
مسبوقة ببادئة. على سبيل المثال، لتجميع بيانات جهاز ARM لنظام التشغيل Android 64 بت مع الإصدار minSdkVersion
من الإصدار 21، سيكون أي مما يلي مناسبًا ويمكنك استخدام أي من الخيارين الأكثر ملاءمة:
$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/clang++ \
-target aarch64-linux-android21 foo.cpp
$ $NDK/toolchains/llvm/prebuilt/$HOST_TAG/bin/aarch64-linux-android21-clang++ \
foo.cpp
في كلتا الحالتين، استبدِل $NDK
بمسار NDK و$HOST_TAG
لمطابقة
NDK الذي نزّلته وفقًا للجدول التالي:
صيغة نظام التشغيل NDK | علامة المضيف |
---|---|
macOS | darwin-x86_64 |
نظام التشغيل Linux | linux-x86_64 |
نظام التشغيل Windows إصدار 64 بت | windows-x86_64 |
تنسيق البادئة أو وسيطة الهدف هنا هو الثلاثة المستهدفة مع لاحقة
تدل على minSdkVersion
. ولا يتم استخدام هذه اللاحقة إلا مع
clang/clang++ ، ولا تتطلّب أدوات binutil (مثل ar
وstrip
)
اللاحقة لأنها لا تتأثر بـ minSdkVersion
. إليك الخطوات الثلاث المستهدفة المتوافقة مع Android:
قيمة ABI | بلوغ القاعدة الثالثة |
---|---|
armeabi-v7a | armv7a-linux-androideabi |
Arm64-v8a | aarch64-linux-android |
x86 | i686-linux-android |
x86-64 | x86_64-linux-android |
ستتوقّع نصوص برمجية متعددة خاصة بالمشروعات من مجمّعات مختلفة على مستوى GCC حيث يستهدف
كل برنامج التجميع مجموعة أنظمة تشغيل/بنية واحدة فقط، وبالتالي قد لا يعالجها
-target
بشكل واضح. وفي هذه الحالات، يمكنك عادةً تضمين الوسيطة -target
كجزء من تعريف برنامج التجميع (مثل CC="clang -target
aarch64-linux-android21
) أو استخدام الترميزات الثنائية التي تحمل بادئة ثلاثية.
الثقة التلقائية
تسمح لك مشاريع Autoconf بتحديد سلسلة الأدوات لاستخدامها مع متغيّرات البيئة. على سبيل المثال، يوضّح ما يلي كيفية إنشاء libpng
للإصدار Android x86-64 على المستوى minSdkVersion
بالمستوى 21 من واجهة برمجة التطبيقات على نظام التشغيل 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/$TARGET$API-clang export AS=$CC export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++ export LD=$TOOLCHAIN/bin/ld export RANLIB=$TOOLCHAIN/bin/llvm-ranlib export STRIP=$TOOLCHAIN/bin/llvm-strip ./configure --host $TARGET make
الأدوات التي تم اختيارها في هذا النموذج صحيحة للإصدار r22 من الإصدار الفيتنامي الجديد (NDK) والإصدارات الأحدث. وقد يتطلّب رمز المنتج الجديد (NDK) أدوات مختلفة.
مشاريع تصميم آلية غير للمؤتمرات التلقائية
توفّر بعض مشاريع Makefile تجميعًا متبادلاً من خلال إلغاء المتغيّرات نفسها التي تستخدمها في مشروع Autoconf. وكمثال على ذلك، يوضّح ما يلي كيفية إنشاء libbzip2
لنظام التشغيل Android x86-64 باستخدام الإصدار 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/$TARGET$API-clang \
AR=$TOOLCHAIN/bin/llvm-ar \
RANLIB=$TOOLCHAIN/bin/llvm-ranlib \
bzip2
الأدوات التي تم اختيارها في هذا النموذج صحيحة للإصدار r22 من الإصدار الفيتنامي الجديد (NDK) والإصدارات الأحدث. وقد يتطلّب رمز المنتج الجديد (NDK) أدوات مختلفة.