{"id":2059,"date":"2023-03-14T17:26:03","date_gmt":"2023-03-14T17:26:03","guid":{"rendered":"https:\/\/berenkudaygorun.com\/blog\/?p=2059"},"modified":"2023-03-14T17:26:03","modified_gmt":"2023-03-14T17:26:03","slug":"ndk","status":"publish","type":"post","link":"https:\/\/berenkudaygorun.com\/blog\/blog\/2023\/03\/14\/ndk\/","title":{"rendered":"NDK"},"content":{"rendered":"<blockquote>\n<p>(Ger\u00e7ek) iyilik, y\u00fczlerinizi do\u011fu ve(ya) bat\u0131 taraf\u0131na \u00e7evirmeniz de\u011fildir. Ger\u00e7ek iyilik, ki\u015finin Allah\u2019a, ahiret g\u00fcn\u00fcne, meleklere, Kitaba ve peygamberlere inanmas\u0131d\u0131r. (Allah\u2019\u0131n r\u0131zas\u0131n\u0131 g\u00f6zeterek) yak\u0131nlara, yetimlere, yoksullara, yolda kalm\u0131\u015fa, (yard\u0131m) isteyenlere ve k\u00f6lelere sevdi\u011fi maldan harcamas\u0131d\u0131r. (Ayr\u0131ca) namaz\u0131 k\u0131lmas\u0131, zek\u00e2t\u0131 vermesidir. (Bunlar) antla\u015fma yapt\u0131\u011f\u0131 zaman s\u00f6zlerini yerine getirenlerdir. (Dahas\u0131), s\u0131k\u0131nt\u0131, hastal\u0131k ve sava\u015f zamanlar\u0131nda sabredenlerdir. Do\u011fru olanlar i\u015fte bunlard\u0131r! [Muttak\u00ee]ler (duyarl\u0131 olanlar) da i\u015fte bunlard\u0131r!<br \/>\nBakara 177<\/p>\n<\/blockquote>\n<h2>Giri\u015f<\/h2>\n<p>Android projelerinde okunmas\u0131n\u0131 istemedi\u011finiz ya da daha fazla performans gereken alanlarda NDK'lara ihtiya\u00e7 duyars\u0131n\u0131z. TUYA isimli firman\u0131n sdk's\u0131n\u0131 inceledi\u011fim zamanlarda en kritik alanlar\u0131 NDK ile geli\u015ftirdiklerinden dolay\u0131 kodlar\u0131n\u0131 istedi\u011fim gibi okuyamam\u0131\u015ft\u0131m ki bu son derece \u00f6nemli olan k\u0131s\u0131md\u0131. \u015eimdi bir projede NDK olu\u015fturmay\u0131 daha sonra olu\u015fturulan bu NDK'y\u0131 ba\u015fka projelere nas\u0131l dahil edebiliriz onu g\u00f6rece\u011fiz.<\/p>\n<h2>Hello World<\/h2>\n<p>Direkt olarak Android Studio \u00fczerinden projenizi olu\u015fturun daha sonras\u0131na <strong>File &gt;&gt; New &gt;&gt; New Module &gt;&gt; Android Native Library<\/strong> k\u0131sm\u0131n\u0131 se\u00e7in. B\u00f6ylece projenizi olu\u015fturmu\u015f olacaks\u0131n\u0131z. \u0130stedi\u011finiz ismi verebilirsiniz. Olu\u015fturma a\u015famas\u0131n\u0131n sonunda a\u015fa\u011f\u0131daki gibi dosya yap\u0131s\u0131 olmas\u0131n\u0131 beklemekteyiz.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-19.51.56.png\" alt=\"\" width=\"100%\" height=\"auto\" \/><\/p>\n<p>\u015eimdi olu\u015fan mod\u00fcl i\u00e7erisindeki CPP ve Kotlin kodlar\u0131na bakal\u0131m. CPP i\u00e7erisinde ana kodlar\u0131m\u0131z varken, kotlin kodlar\u0131 ise bir aray\u00fcz g\u00f6revi g\u00f6recektir. Kotlin kodlar\u0131 arac\u0131l\u0131\u011f\u0131 ile projemizde istedi\u011fimiz Native kodlara ula\u015faca\u011f\u0131z. <\/p>\n<p><img decoding=\"async\" src=\"http:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-19.52.36.png\" alt=\"\" width=\"100%\" height=\"auto\" \/><\/p>\n<p>Yukar\u0131daki kodlarda cpp kodlar\u0131n\u0131 g\u00f6rmekteyiz a\u015fa\u011f\u0131da cpp ve kotlin kodlar\u0131n\u0131 veriyorum. Bunlar mod\u00fcl\u00fc olu\u015fturdu\u011funuzda defult olarak gelen kodlar.<\/p>\n<pre><code class=\"language-cpp\">#include &lt;jni.h&gt;\n#include &lt;string&gt;\n\nextern &quot;C&quot; JNIEXPORT jstring JNICALL\nJava_com_cyberwhiz_nativekutuphane_NativeLib_stringFromJNI(\n        JNIEnv* env,\n        jobject \/* this *\/) {\n    std::string hello = &quot;Hello from C++&quot;;\n    return env-&gt;NewStringUTF(hello.c_str());\n}<\/code><\/pre>\n<pre><code class=\"language-kotlin\">package com.cyberwhiz.nativekutuphane\n\nclass NativeLib {\n\n    \/**\n     * A native method that is implemented by the &#039;nativekutuphane&#039; native library,\n     * which is packaged with this application.\n     *\/\n    external fun stringFromJNI(): String\n\n    companion object {\n        \/\/ Used to load the &#039;nativekutuphane&#039; library on application startup.\n        init {\n            System.loadLibrary(&quot;nativekutuphane&quot;)\n        }\n    }\n}<\/code><\/pre>\n<p>\u015eimdi gradle dosyas\u0131na istedi\u011fimiz ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 ekleyelim.<\/p>\n<pre><code>implementation project(path: &#039;:nativeKutuphane&#039;)<\/code><\/pre>\n<p>\u015eimdi ise MainActivity alt\u0131na as\u0131l kodlar\u0131m\u0131z\u0131 yazal\u0131m.<\/p>\n<pre><code class=\"language-kotlin\">package com.cyberwhiz.myapplication\n\nimport androidx.appcompat.app.AppCompatActivity\nimport android.os.Bundle\nimport com.cyberwhiz.nativekutuphane.NativeLib\n\nclass MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        println(NativeLib().stringFromJNI())\n    }\n}\n<\/code><\/pre>\n<p>Program\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda \u00e7\u0131kt\u0131n\u0131z a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-20.03.31.png\" alt=\"\" width=\"100%\" height=\"auto\" \/><\/p>\n<p>\u015eimdi bu ndk'y\u0131 ba\u015fka bir projede nas\u0131l kullanabilece\u011fimize bakal\u0131m.<\/p>\n<h2>Export<\/h2>\n<p>Asl\u0131nda projemiz derlendi\u011finde .so ve .aar dosyalar\u0131m\u0131z olu\u015ftu. Bunlar\u0131 a\u015fa\u011f\u0131daki resimde g\u00f6stermeye \u00e7al\u0131\u015ft\u0131m.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-20.17.18.png\" alt=\"\" width=\"100%\" height=\"auto\"  \/><\/p>\n<p>Burada asl\u0131nda \u00f6nemli olan .aar dosyam\u0131z ama .so dosyalar\u0131n\u0131n nerede oldu\u011funu merak ederseniz a\u015fa\u011f\u0131daki \u00f6rnek path'de bulabilirsiniz:<br \/>\n<strong>MyApplication4\/nativeKutuphane\/build\/intermediates\/cmake\/debug\/obj\/arm64-v8a<\/strong><\/p>\n<p>\u015eimdi bu .aar dosyas\u0131na normal olarak gidelim ve bunu kopyalayal\u0131m asl\u0131nda export alaca\u011f\u0131m\u0131z dosya bu olacakt\u0131 ve bizim i\u00e7in zaten haz\u0131rland\u0131.<\/p>\n<p>Daha sonras\u0131nda yeni bir proje ba\u015flat\u0131n. Ba\u015flatt\u0131\u011f\u0131n\u0131z yeni projede libs klas\u00f6r\u00fc alt\u0131na bu .aar dosyas\u0131n\u0131 kopyalay\u0131n. Son g\u00f6r\u00fcnt\u00fc a\u015fa\u011f\u0131daki resimde oldu\u011fu gibi olacakt\u0131r.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-20.20.29.png\" alt=\"\" width=\"100%\" height=\"auto\" class=\"aligncenter size-full wp-image-2064\" srcset=\"https:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-20.20.29.png 972w, https:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-20.20.29-768x1365.png 768w, https:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-20.20.29-864x1536.png 864w\" sizes=\"(max-width: 972px) 100vw, 972px\" \/><\/p>\n<p>\u015eimdi gradle dosyam\u0131z\u0131 a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyelim.<\/p>\n<pre><code>implementation fileTree(dir: &#039;libs&#039;, include: [&#039;*.jar&#039;, &#039;*.aar&#039;])<\/code><\/pre>\n<p>Hepsi bu! Art\u0131k kullanmaya ba\u015flayabiliriz. MainActivity s\u0131n\u0131f\u0131n\u0131 a\u015fa\u0131daki gibi de\u011fi\u015ftirdim.<\/p>\n<pre><code class=\"language-kotlin\">package com.cyberwhiz.myapplication\n\nimport android.os.Bundle\nimport androidx.appcompat.app.AppCompatActivity\nimport com.cyberwhiz.nativekutuphane.NativeLib;\n\nclass MainActivity : AppCompatActivity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        val nativeLib = NativeLib()\n        val result = nativeLib.stringFromJNI()\n        println(result)\n\n    }\n}<\/code><\/pre>\n<p>\u0130\u015fte \u00e7\u0131kt\u0131:<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/berenkudaygorun.com\/blog\/wp-content\/uploads\/2023\/03\/Screenshot-2023-03-14-at-20.23.34.png\" alt=\"\" width=\"100%\" height=\"auto\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Ger\u00e7ek) iyilik, y\u00fczlerinizi do\u011fu ve(ya) bat\u0131 taraf\u0131na \u00e7evirmeniz de\u011fildir. Ger\u00e7ek iyilik, ki\u015finin Allah\u2019a, ahiret g\u00fcn\u00fcne, meleklere, Kitaba ve peygamberlere inanmas\u0131d\u0131r. (Allah\u2019\u0131n r\u0131zas\u0131n\u0131 g\u00f6zeterek) yak\u0131nlara, yetimlere,&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/berenkudaygorun.com\/blog\/blog\/2023\/03\/14\/ndk\/\">Devam\u0131n\u0131 oku<span class=\"screen-reader-text\">NDK<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[363],"tags":[],"class_list":["post-2059","post","type-post","status-publish","format-standard","hentry","category-android","entry"],"_links":{"self":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/2059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/comments?post=2059"}],"version-history":[{"count":4,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/2059\/revisions"}],"predecessor-version":[{"id":2066,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/posts\/2059\/revisions\/2066"}],"wp:attachment":[{"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/media?parent=2059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/categories?post=2059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/berenkudaygorun.com\/blog\/wp-json\/wp\/v2\/tags?post=2059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}