ئىلگىرى بىر ئىھتىياج سەۋەبلىك C++ دا ئىندىكىس ماتورىدىن بىرنى يازغان ئىدىم، بۈگۈن ماتېرىيال كۆرۈپ ئەسلى كودىدىن Android Ndk بىلەن تەرجىمىلىۋالدىم،
تۆەندە شۇنى ئورتاقلىشاي:
كىتەرلىك مۇھىتلار:
- Linux x64 ياكى Windows x64ياكى macOS x64
- CMake 3.20 ياكى ئۇنىڭدىن چوڭ نەشىرى قاچىلانغان بولىشى كىرەك
- Ninja build قاچىلانغان بولىشى كىرەك
- Android NDK قاچىلانغان بولىشى كىرەك، Android studio دىن ئۆزىڭىز ياقتۇرغان بىرەر نەشىرىنى چۈشۈرسىڭىز بولىدۇ، مەسىلەن مېنىڭكى R25
- CMake project قۇرغان بولىشىڭىز كىرەك
ئەڭ ئاز بولغاندا CMake غا ياردەم قىلىپ (ئەمەلىيەتتە ئۆزىڭىزگگ ياردەم قىلىپ) تۆەندىكى ئۈچ تال ئۆزگەرگۈچى مىقدارغا قىممەت بېرىشىڭىز كىرەك، set(CMAKE_SYSTEM_NAME "Android")
بۇ چوقۇم زۆرۈر، CMAKE_ANDROID_ARCH_ABI نىڭ قىممىتىنىڭ قانداق بولسا بولىدىغىنىنى ئۆزىڭىز كىرەكلىك بولغان ئۈسكۈنىنىڭ CPU سىنىڭ بۇيرۇق توپلىمىغا ئاساسەن بىكىتىڭ، مەسىلەن مەن ARM64 CPU نى تاللىۋالدىم،
تولۇق تىزىملىكى بۇ يەردە: https://developer.android.google.cn/ndk/guides/cmake#android_abi
ئاندىن ئەڭ ئاخىرقىسى CMAKE_ANDROID_NDK نى سىز قاچىلىغان NDK نىڭ غول مۇندەرىجىسىگە تەڭشەپ بەرسىڭىزلا بولىدۇ،
set(CMAKE_SYSTEM_NAME "Android")
set(CMAKE_ANDROID_ARCH_ABI "arm64-v8a")
set(CMAKE_ANDROID_NDK "$ENV{HOME}/Android/Sdk/ndk/25.1.8937393")
مۇھىم ئەسكەرتىش، يۇقارقى CMAKE_SYSTEM_NAME دىن باشلانغان ئۈچ قۇر بۇيرۇق چوقۇم project() نىڭ ئۈستىدە بولىشى كىرەك ئىكەن، مەن نەچچە سائەت ئاشۇنىڭ بىلەن ئاۋارە بولۇپ كەتتىم،
ئەمدى بىز بىر مۇندەرىجە قۇرۇپ Compile قىلغۇزۇپ باقايلى:
ئەسكەرتىش: IsAndroidTarget دىگەن ئۆزۈم قۇرىۋالغان ئۆزگەرگۈچى مىقدار، ئۇ نۆۋەتتىكى يازمىنىڭ بىر قىسمى ئەمەس.
قارىساق سىغىم سەل چوڭ چىقىپ كېتىپ قاپتۇ، يەنى 5 مىگابايىتتىن ئارتۇق، نېمىشقا؟
چۈنكى ھازىر ماۋۇ تەرجىمىلەنگەن Shared library نىڭ ئىچىدە debug symbol لارمۇ بار،
مەسىلەن مەن nm بۇيرۇقى بىلەن كۆرۈپ باقاي:
بىز ئۇلارنى چىقىرۋەتسەك تىخىمۇ ئورۇقلايدۇ،
قانداق چىقىرۋېتىمىز؟ قانداق قىلىپ ئورۇقلىتىمىز؟
جاۋابى شۇكى strip بۇيرۇقى بىلەن، ئۇنداقتا سىناپ باقاي قىنى:
خاتالىق چىقتى، دىمەك ماۋۇ Android نىڭ ARM64 shared library نى Linux نىڭ x64 abi ھالەتتىكى strip قۇرالى قوللىمىدى دىگەن گەپ،
سوئال: ئۇنداقتا strip دىگەن بۇ قۇرال نەدىن كېلىدۇ؟
جاۋاب: Compiler بىلەن بىللە كېلىدۇ،
ئۇنداقتا مەن ndk نىڭ ئىچىدىن مۇشۇنداق ئىسىملىك ھۆججەتلەرنى ئىزدەپ باقاي؛
دەرۋەدە llvm-strip دەپ بىر ھۆججەت بار ئىكەن، ئۇنداقتا ئىشلىتىپ باقاي:
بۇيرۇق فورماتى تۆەندىكىدەك:
llvm-strip your_shared_library.so -o your_shared_library-stripped.so
نەتىجىسى:
Strip قىلغاندىن كىيىن سىغىمى 940 كىلوبايىتقا تۆۋەنلىدى دىگەن گەپ، يەنى بەش ھەسسىدىن ئارتۇقراق.
پايدىلىنغان مەنبەلەر:
https://developer.android.google.cn/ndk/guides/cmake
https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.htmlhttps://cmake.org/cmake/help/book/mastering-cmake/chapter/Cross%20Compiling%20With%20CMake.html
تامام.
--- شىنجاڭ ئالماس يۇمشاق دېتال چەكلىك شىركىتى https://almas.biz https://mulazim.com