شما هیچ وقت نمیتوانید با یکی از زبانهای خانواده C برای اندروید برنامه ای را بنویسید چون برای اندروید کامپایل نمیشن؛ گوگل ابزاری رو با نام NDK معرفی کرده که کار کامپایل رو انجام میده؛ بزرگترین مشکل برنامه نویسهای جاوا(کوتلین رو نام نمیبرم چون هنوز محتاج جاواس) اینه که برنامه هایی که برای اندروید مینویسند قابل دیکامپایل شدنن و این باعث میشه که اگر اطلاعاتی از سرورشون در برنامه بکار برده باشن توسط افراد استخراج و تمام اطلاعاتی که سمت سرور دریافت و ارسال میکنن لو بره!
خب ما در مطلب گذشته راهی رو گفتیم که باعث میشه کلید ها از سمت اندروید و سرور کاملاً رمزنگاری بشن، ولی باز در هر صورت سمت اندرویدش به یه طریقی قابل شکستن هست!
در ادامه راهی را با بکارگیری ابزار NDK و زبان ++C به شما پیشنهاد میدیم که بدون هیچ گونه رمزنگاری اطلاعات سرور خودتون رو درون برنامتون قرار بدید.
در ابتدا ابزار NDK رو میتونید از این صفحه دانلود کنید؛ دقت کنید که اگر ویندوزی هستید متناسب با بیت سیستم عاملتون فایل را دانلود کنید تا به مشکل نخورید.
نسخه های جدید اندروید استدیو و Intellij از کدهای ++C در پروژه های اندروید پشتیبانی میکنند که شما میتونید هنگام ساخت پروژه فعالش کنید، ما این مطلب را برای اون دسته افرادی میگیم که به هر نحوی قادر به فعال کردن پشتیبانی از ++C نیستند.
اول کار کلاس اصلی را باز کنید و داخلش کد زیر را بنویسید:
متد LoadLibrary همینطور که از اسمش پیداست عمل لود کردن کدهای C رو انجام میده و یک پارامتر برای نام کتابخانه از نوع استرینگ دریافت میکنه، تابع stringFromJNI هم زمانی به کار میاد که بخوایم از مقدار تعریف شده سمت کد C در کلاس جاوامون استفاده کنیم.
حال باید در فولدر app مانند تصویر زیر پوشه ای را با نام jni ایجاد کنید:
سپس با کلیک ترکیبی CTRL+ALT+S وارد صفحه تنظیمات بشید و همانند تصویر زیر به مسیر مورد نظر برید و فیلد ها رو بر اساس پروژتون پر کنید(دقت کنید که اگر ورژن جاوا استفاده شده در پروژتون را نمیدونید به منوی File رفته رو روی Project Structure کلیک کنید):
بعد از این کار روی کلاس جاوا کلیک راست کرده و روی گزینه NDK و بعد javah کلیک کنید، با این عمل فایلی با پسوند h و محتوایی مانند زیر در پوشه jni ایجاد خواهد شد:
فعلا از این پوشه بیرون نیاید چون باید دو تا فایل دیگه هم با نام های android.mk و application.mk ایجاد و محتوای پایین را درونشون قرار بدید(دقت کنید که مقدار های LOCAL_MODULE و APP_MODULES باید نام اون کتابخانه ای باشن که ما در کلاس جاوا در متد LoadLibrary به عنوان پارامتر قرار دادیم و مقدار LOCAL_SRC_FILES هم نام فایل سی پلاسی که ایجاد کردیم):
فعلا از این پوشه بیرون نیاید چون باید دو تا فایل دیگه هم با نام های android.mk و application.mk ایجاد و محتوای پایین را درونشون قرار بدید(دقت کنید که مقدار های LOCAL_MODULE و APP_MODULES باید نام اون کتابخانه ای باشن که ما در کلاس جاوا در متد LoadLibrary به عنوان پارامتر قرار دادیم و مقدار LOCAL_SRC_FILES هم نام فایل سی پلاسی که ایجاد کردیم):
بسیار خب حال از پوشه jni بیرون میکشیم و فایلی را با نام CMakeLists.txt ایجاد میکنیم و کد زیر را درون آن قرار میدیم(ادیت این فایلم مثل قبل هست باید بر حسب نام کتابخانه و نام فایل سی پلاس ویرایش بشه و این رو هم در نظر داشته باشید که اگر جایی را به اشتباه جایگذاری کنید هنگام بیلد و اجرا کردن پروژه خطایی با محتوا اینکه شما فایل را دستی وارد کردید به شما میده):
سپس به فایل build.gradle که زیر پوشه app هست مراجعه میکنید و کد زیر رو که کامپایلر را مجبور میکنه تا از ما مسیر پوشه دانلود شده NDK را بخواد در تگ android قرار میدیم:
وقتی کد را قرار دادید پروژه را سینک کنید تا با خطا نصب NDK مواجه بشید، روی لینک install NDK and sync project کلیک کنید تا با صفحه زیر مواجه بشید:
همانند تصویر بالا محلها را پر کنید و روی تایید کلیک کنید؛ سپس به فایل جاوا مراجعه کرده و برای متن TextView مانند تصویر تابع stringFromNJI را ست کنید:
کار تمام است پروژه را ران کنید خواهید دید که آدرس وبسایت ما در وسط صفحه دیوایس به شما چشمک خواهد زد.
در پایان باید ذکر کنم که استفاده از این روش برای برقراری ارتباط با سرور بهترین روش هست و توسط خود گوگل به توسعه دهندگان پیشنهاد شده!
امیدوارم که مفید بوده باشه در پایان بگم تمام محتوا از وبسایت یولو کش رفته شده.