Uolo

ارتباط ایمن بین سرور و اپلیکیشن

شما هیچ وقت نمیتوانید با یکی از زبانهای خانواده C برای اندروید برنامه ای را بنویسید چون برای اندروید کامپایل نمیشن؛ گوگل ابزاری رو با نام NDK معرفی کرده که کار کامپایل رو انجام میده؛ بزرگترین مشکل برنامه نویسهای جاوا(کوتلین رو نام نمیبرم چون هنوز محتاج جاواس) اینه که برنامه هایی که برای اندروید مینویسند قابل دیکامپایل شدنن و این باعث میشه که اگر اطلاعاتی از سرورشون در برنامه بکار برده باشن توسط افراد استخراج و تمام اطلاعاتی که سمت سرور دریافت و ارسال میکنن لو بره!

خب ما در مطلب گذشته راهی رو گفتیم که باعث میشه کلید ها از سمت اندروید و سرور کاملاً رمزنگاری بشن، ولی باز در هر صورت سمت اندرویدش به یه طریقی قابل شکستن هست!
در ادامه راهی را با بکارگیری ابزار NDK و زبان ++C به شما پیشنهاد میدیم که بدون هیچ گونه رمزنگاری اطلاعات سرور خودتون رو درون برنامتون قرار بدید.

در ابتدا ابزار NDK رو میتونید از این صفحه دانلود کنید؛ دقت کنید که اگر ویندوزی هستید متناسب با بیت سیستم عاملتون فایل را دانلود کنید تا به مشکل نخورید.

نسخه های جدید اندروید استدیو و Intellij از کدهای ++C در پروژه های اندروید پشتیبانی میکنند که شما میتونید هنگام ساخت پروژه فعالش کنید، ما این مطلب را برای اون دسته افرادی میگیم که به هر نحوی قادر به فعال کردن پشتیبانی از ++C نیستند.

 

اول کار کلاس اصلی را باز کنید و داخلش کد زیر را بنویسید:

Code

متد LoadLibrary همینطور که از اسمش پیداست عمل لود کردن کدهای C رو انجام میده و یک پارامتر برای نام کتابخانه از نوع استرینگ دریافت میکنه، تابع stringFromJNI هم زمانی به کار میاد که بخوایم از مقدار تعریف شده سمت کد C در کلاس جاوامون استفاده کنیم.

حال باید در فولدر app مانند تصویر زیر پوشه ای را با نام jni ایجاد کنید:

سپس با کلیک ترکیبی CTRL+ALT+S وارد صفحه تنظیمات بشید و همانند تصویر زیر به مسیر مورد نظر برید و فیلد ها رو بر اساس پروژتون پر کنید(دقت کنید که اگر ورژن جاوا استفاده شده در پروژتون را نمیدونید به منوی File رفته رو روی Project Structure کلیک کنید):

Code

بعد از این کار روی کلاس جاوا کلیک راست کرده و روی گزینه NDK و بعد javah کلیک کنید، با این عمل فایلی با پسوند h و محتوایی مانند زیر در پوشه jni ایجاد خواهد شد:

Code

سپس فایلی با نام native-lib.cpp در همان پوشه ایجاد کنید و کدهای زیر را در آن قرار بدید؛ فقط دقت کنید که ir_uolo_test_ndk بسته به نام پکیجتون باید تغییر کنه:

Code

فعلا از این پوشه بیرون نیاید چون باید دو تا فایل دیگه هم با نام های android.mk و application.mk ایجاد و محتوای پایین را درونشون قرار بدید(دقت کنید که مقدار های LOCAL_MODULE و APP_MODULES باید نام اون کتابخانه ای باشن که ما در کلاس جاوا در متد LoadLibrary به عنوان پارامتر قرار دادیم و مقدار LOCAL_SRC_FILES هم نام فایل سی پلاسی که ایجاد کردیم):

Code

بسیار خب حال از پوشه jni بیرون میکشیم و فایلی را با نام CMakeLists.txt ایجاد میکنیم و کد زیر را درون آن قرار میدیم(ادیت این فایلم مثل قبل هست باید بر حسب نام کتابخانه و نام فایل سی پلاس ویرایش بشه و این رو هم در نظر داشته باشید که اگر جایی را به اشتباه جایگذاری کنید هنگام بیلد و اجرا کردن پروژه خطایی با محتوا اینکه شما فایل را دستی وارد کردید به شما میده):

Code

سپس به فایل build.gradle که زیر پوشه app هست مراجعه میکنید و کد زیر رو که کامپایلر را مجبور میکنه تا از ما مسیر پوشه دانلود شده NDK را بخواد در تگ android قرار میدیم:

Code

وقتی کد را قرار دادید پروژه را سینک کنید تا با خطا نصب NDK مواجه بشید، روی لینک install NDK and sync project کلیک کنید تا با صفحه زیر مواجه بشید:

Code

همانند تصویر بالا محلها را پر کنید و روی تایید کلیک کنید؛ سپس به فایل جاوا مراجعه کرده و برای متن TextView مانند تصویر تابع stringFromNJI را ست کنید:

Code

کار تمام است پروژه را ران کنید خواهید دید که آدرس وبسایت ما در وسط صفحه دیوایس به شما چشمک خواهد زد.

در پایان باید ذکر کنم که استفاده از این روش برای برقراری ارتباط با سرور بهترین روش هست و توسط خود گوگل به توسعه دهندگان پیشنهاد شده!

 


امیدوارم که مفید بوده باشه 🙂

اضافه کردن نظر

تکنولوژی