{"id":208,"date":"2018-01-04T17:39:45","date_gmt":"2018-01-04T17:39:45","guid":{"rendered":"http:\/\/www.yazilimperver.com\/?p=208"},"modified":"2019-03-04T19:02:42","modified_gmt":"2019-03-04T19:02:42","slug":"android-ndk-ile-ugrasirken-dikkat-edilecekler","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/","title":{"rendered":"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :)"},"content":{"rendered":"<p>Evet arkada\u015flar C++, GitHub derken nereden \u00e7\u0131kt\u0131 bu NDK diyebilirsiniz ama e\u011fer elinizde haz\u0131r C++ k\u00fct\u00fcphaneleriniz var ve bunu h\u0131zl\u0131 ve performansl\u0131 bir \u015fekilde Android platformunda kullanmak istiyorsan\u0131z en iyi y\u00f6ntem NDK (Native Development Kit).\u00a0 NDK her ne kadar google taraf\u0131ndan resmi olarak \u00f6nerilmese de, y\u00fcksek performans ve \u00e7oklu platform deste\u011fi i\u00e7in olmazsa olmaz. Ben de bir s\u00fcredir geli\u015ftirmekte oldu\u011fum 2B uygulama alt yap\u0131m\u0131 android \u00fczerinde de kullanmak istiyordum ve tekrardan bu mecraya bir d\u00f6n\u00fc\u015f yapm\u0131\u015f oldum.<\/p>\n<p>Bundan yakla\u015f\u0131k iki \u00fc\u00e7 sene \u00f6ncesinde tez ve benzeri \u00e7al\u0131\u015fmalar i\u00e7in bir \u00e7ok \u00fc\u00e7\u00fcnc\u00fc parti k\u00fct\u00fcphaneyi ve kendi yaz\u0131l\u0131m alt yap\u0131m\u0131 androide ta\u015f\u0131mak i\u00e7in u\u011fra\u015fm\u0131\u015ft\u0131m ve hakikaten \u00f6mr\u00fcmden \u00f6m\u00fcr gittiydi. O s\u0131ralar CygWin veya eclipse \u00fczeirnde ilk etapta ba\u015flam\u0131\u015f daha sonralar\u0131 ise internet \u00fczerinden buldu\u011fum MSBuild scriptleri ile visual studio \u00fczerinden bu i\u015fi halletmeye \u00e7al\u0131\u015ft\u0131yd\u0131m (veya kullanmaya \u00e7al\u0131\u015f\u0131yordum \ud83d\ude42<\/p>\n<p>Neyseki visual studio 2015 ile birlikte microsot art\u0131k Android deste\u011fini resmi olarak Visual Studio&#8217;ya getirdi. Tabi buradan g\u00f6zleriniz \u00e7ok ta parlamas\u0131n \ud83d\ude42 halen \u00e7o\u011fu \u015fey \u00e7ok a\u00e7\u0131k de\u011fil ve sa\u00e7 ba\u015f yolduracak bir \u00e7ok durum olabiliyor. \u0130\u015fte bu ilk yaz\u0131m\u0131 da buna ay\u0131ray\u0131m dedim \ud83d\ude42<\/p>\n<p><strong>Yani MS ortam\u0131nda Visual Studio kullanarak NDK kullan\u0131m\u0131nda dikkat etmeniz gerekenler.<\/strong><\/p>\n<p>\u00d6ncelikle e\u011fer salt hedef platform android ise \u015funu belirtmekte fayda var, bence VS yan\u0131nda muhakkak android studio gibi bir ara\u00e7 \u00f6\u011frenmeniz ve kotline de girmeniz faydal\u0131 olacakt\u0131r. Ama amac\u0131n\u0131z benim gibi bir \u015fekilde android platformunda uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmak ise VS i\u015finiz g\u00f6recektir. Elbette android ve NDK alt yap\u0131s\u0131 ile ilgili bilmeniz gerekenler var (bunlar\u0131 k\u0131saca bir sonraki yaz\u0131mda anlatmay\u0131 planl\u0131yorum) fakat beklentilerinizi VS a\u00e7\u0131s\u0131ndan \u00e7okta y\u00fcksek tutmay\u0131n. \u00c7\u00fcnk\u00fc VS biraz NDK ve ilgili teknolojileri geriden takip ediyor. En son VS 2017.15.5.2 g\u00fcncellemesi halen Ndk13b yi destekliyor (ha burada el ile en son NDK yi burada kullanmaya \u00e7al\u0131\u015fabilirsiniz ama a\u00e7\u0131k\u00e7as\u0131 benim en son Ndk14 ile ya\u015fad\u0131\u011f\u0131m deneyim hi\u00e7 iyi de\u011fildi :). Bu arada yeni 2017.15.6 g\u00fcncellemesi ile Ndk15c desteklenecekmi\u015f. Her neyse konumuzdan fazla sapmadan VS NDK kullan\u0131m\u0131na geri d\u00f6nelim. Burada VS ile derlemeyi planlad\u0131\u011f\u0131m k\u00fct\u00fcphane SDL 2.0.7.<\/p>\n<p>SDL yayg\u0131n olarak bir \u00e7ok geli\u015ftirici taraf\u0131ndan kullan\u0131lan ve platform ba\u011f\u0131ms\u0131z yaz\u0131l\u0131m ve oyun geli\u015ftirmenize yard\u0131mc\u0131 olan bir k\u00fct\u00fcphane.\u00a0 Benzeri GLFW, GLUT, GLU ve SFML &#8216;den ziyade SDL i kullanmam\u0131n temel bir ka\u00e7 sebebi var (bu arada di\u011fer k\u00fct\u00fcphanelerin hemen hemen t\u00fcm\u00fc ile geli\u015ftirme yapt\u0131m \u00f6zellikle GLFW ve GLUT ile fakat kendi k\u00fct\u00fcphanem i\u00e7in SDL de karar k\u0131ld\u0131m):<\/p>\n<ul>\n<li>\u00d6ncelikle OpenGL 3\/4+ deste\u011fi (\u00f6r. SFML 3+ desteklemiyor),<\/li>\n<li>Android deste\u011fi (GLFW bu deste\u011fi sunmuyor ama a\u00e7\u0131k\u00e7as\u0131 di\u011ferlerine g\u00f6re \u00e7ok daha temiz ve kullan\u0131\u015fl\u0131),<\/li>\n<li>Olduk\u00e7a kapsaml\u0131 sistem ve ek kabiliyetler sunuyor (Opengl yan\u0131nda kendi \u00e7izim API&#8217;leri de mevcut, SFML de benzeri yelpazeyi sunuyor bu arada),<\/li>\n<li>Yanc\u0131 bir \u00e7ok k\u00fct\u00fcphanesi var (SDL_Mixer, SDL_Image, SDL_NET, etc. Bu konuda en geride kalan GLFW, GLU ve GLUT),<\/li>\n<li>Olduk\u00e7a olgun ve geni\u015f bir kullan\u0131c\u0131 kitlesi var.<\/li>\n<\/ul>\n<p>Bu arada bu yaz\u0131mda faydaland\u0131\u011f\u0131m sayfalardan biri de (http:\/\/trederia.blogspot.com.tr\/2017\/03\/building-sdl2-for-android-with-visual.html) olmu\u015ftur kendisi \u00e7ok g\u00fczel bir \u015fekilde SDL&#8217;i VS ile nas\u0131l derleyebilece\u011fimizi i\u00e7in ingilizce olarak anlatmaktad\u0131r. SDL benzeri k\u00fct\u00fcphaneleri VS ve NDK ile nas\u0131l derleyebilece\u011fimiz ile ilgili ben de ayr\u0131 bir yaz\u0131 yazaca\u011f\u0131m onun i\u00e7in burada o konuya girmiyorum.<\/p>\n<p>Evet \u015fimdi k\u0131sa k\u0131sa NDK ile geli\u015ftirme yaparken hayati olan ve size faydal\u0131 olacak bilgilere gelelim:<\/p>\n<h2><span style=\"color: #3366ff;\"><strong>NDK hakk\u0131nda genel bilgiler:<\/strong><\/span><\/h2>\n<p>\u00d6ncelikle NDK nedir ile ba\u015flayal\u0131m:<\/p>\n<ul>\n<li>NDK, Android i\u00e7in C\/C++ kullanarak native kod geli\u015ftirmenize olanak sa\u011flayan bir API&#8217;dir.<\/li>\n<li>NDK ile yaz\u0131l\u0131m geli\u015ftirmeye ba\u015flamadan \u00f6nce Android platformu ile ilgili genel bilgileri edinmeniz faydal\u0131 olacakt\u0131r. Bu noktada \u00f6zellikle\u00a0<a href=\"http:\/\/www.vogella.com\/tutorials\/android.html\">http:\/\/www.vogella.com\/tutorials\/android.html<\/a> sayfas\u0131n\u0131 sizlere \u00f6\u011frenece\u011fim. Buradan;\n<ul>\n<li>Android i\u015fletim sistemi mimarisi, genel yap\u0131 ta\u015flar\u0131, Dalvik VM<\/li>\n<li><img decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.vogella.com\/tutorials\/Android\/img\/xandroidsoftwarelayer10.png.pagespeed.ic.DzKZNZsgEE.webp\" alt=\"Android software layers\" \/><\/li>\n<li>Application, activity, service, broadcast receiver ve content provided kavramlar\u0131 (\u00f6zellikle activity).<\/li>\n<li><a href=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Mimari.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-214\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Mimari-276x300.png\" alt=\"\" width=\"276\" height=\"300\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Mimari-276x300.png 276w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Mimari-150x163.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Mimari-200x217.png 200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Mimari.png 396w\" sizes=\"auto, (max-width: 276px) 100vw, 276px\" \/><\/a><\/li>\n<li>Android (ve dahi NDK) uygulamalar\u0131na ili\u015fkin genel ayarlama ve konfig\u00fcrasyonlar\u0131n yap\u0131ld\u0131\u011f\u0131 AndroidManifext.xml dosyalar\u0131na a\u015fina olmal\u0131s\u0131n\u0131z.<\/li>\n<li>Android.mk (k\u0131saca android NDK uygulamalar\u0131 i\u00e7in makefile), bu dosya i\u00e7erisinde kullan\u0131lan derleme, ba\u011flama (link) ve di\u011fer kullan\u0131labilecek parametreler (a\u015fa\u011f\u0131da k\u0131sa bir ka\u00e7 \u00f6rnek verece\u011fim),<\/li>\n<li>NDK uygulamas\u0131n\u0131n derlenmesinde uygulama seviyesinde yap\u0131lan baz\u0131 ayarlar i\u00e7in Application.mk ya a\u015fina olmal\u0131s\u0131n\u0131z (a\u015fa\u011f\u0131da k\u0131sa bir ka\u00e7 \u00f6rnek verece\u011fim),<\/li>\n<li>Android s\u00fcr\u00fcmleri ve hedef platformlar\u0131, AVD (Android Virtual Device), k\u0131saca Android Debug Bridge (ADB) kavram ve ara\u00e7lar\u0131.<\/li>\n<li>NDK uygulamalar\u0131 (native activities) iki \u015fekilde kullan\u0131labilirler direk native activiteler ba\u015flat\u0131larak (NDK \u00fczerinden ve hi\u00e7 java kodu yazmadan) ya da Java ile yaz\u0131lacak olan bir wrapper activity arac\u0131l\u0131\u011f\u0131 ile ger\u00e7ekle\u015ftirilebilir. Bu se\u00e7im AndroidManifest i\u00e7erisinden hasCode parametresi ile ger\u00e7ekle\u015ftiriliyor.<\/li>\n<li>E\u011fer aray\u00fcz uygulamalar\u0131n\u0131 Java kullanarak geli\u015ftirecek iseniz veya Java k\u0131s\u0131mlar\u0131 da olacak ise JNI ve Java \/ Native kod haberle\u015ftirme k\u0131s\u0131mlar\u0131na da bir bakman\u0131z faydal\u0131 olacakt\u0131r. Bu arada k\u00fc\u00e7\u00fck bir not. \u00c7al\u0131\u015fma esnas\u0131nda Java ile native k\u0131s\u0131mlar aras\u0131ndaki etkile\u015fimleri ne kadar az tutarsan\u0131z o performans a\u00e7\u0131s\u0131nda iyi olur.<\/li>\n<\/ul>\n<\/li>\n<li>NDK, SDK manager arac\u0131l\u0131\u011f\u0131 ile kurulabilir (<a href=\"https:\/\/developer.android.com\/ndk\/guides\/index.html\">https:\/\/developer.android.com\/ndk\/guides\/index.html<\/a> adresinden daha detayl\u0131 bilgilere ula\u015fabilirsiniz).<\/li>\n<li>Android studio, komut sat\u0131r\u0131 ve Visual Studio kullanarak NDK uygulamalar\u0131 geli\u015ftirebilirsiniz. E\u011fer ilgili k\u00fct\u00fcphaneye ili\u015fkin elinize Android.mk dosyas\u0131 var ise veya ta\u015f\u0131yaca\u011f\u0131n\u0131z kod veya k\u00fct\u00fcphaneler \u00e7ok b\u00fcy\u00fck ve karma\u015f\u0131k de\u011fil ise komut sat\u0131r\u0131n\u0131 tercih edebilirsiniz.<\/li>\n<li>Yukar\u0131daki sayfa yan\u0131nda\u00a0<a href=\"http:\/\/www.indigoo.com\/dox\/mobdev\/01_Android\/Android-NDK.pdf\">http:\/\/www.indigoo.com\/dox\/mobdev\/01_Android\/Android-NDK.pdf<\/a> sitesinden de NDK ile ilgili bilgiler edinebilirsiniz.<\/li>\n<\/ul>\n<h2><span style=\"color: #3366ff;\"><strong>Neden NDK:<\/strong><\/span><\/h2>\n<p>Bunlar\u0131ndan yan\u0131nda NDK ile uygulama geli\u015ftirmeden \u00f6nce a\u015fa\u011f\u0131dakilerden en az\u0131ndan biri sizin ama\u00e7lar\u0131n\u0131z aras\u0131nda de\u011fil ise tekrar d\u00fc\u015f\u00fcnmenizde fayda var.<\/p>\n<ul>\n<li><strong>\u00dcst seviye performans temini:<\/strong>\u00a0Android uygulamalar\u0131ndan hele ki CPU a\u011fr\u0131l\u0131kl\u0131 i\u015f yap\u0131yorsan\u0131z ya da CPU ba\u011f\u0131ml\u0131 k\u0131s\u0131mlar\u0131n\u0131z var ise bunlar\u0131 C++ ile geli\u015ftirmek size performans kazan\u0131m\u0131 sa\u011flayacakt\u0131r.<\/li>\n<li><strong>Y\u00fcksek performans API&#8217;lerini kullanma:<\/strong>\u00a0\u00d6zellikle OpenGL ES ve Vulkan alt yap\u0131s\u0131na ili\u015fkin detayl\u0131 API&#8217;ler NDK ile sunulmakta. Bu sebeple \u00e7o\u011fu \u00e7oklu platform oyun geli\u015ftiricileri NDK&#8217;yi kullanmaktad\u0131rlar.<\/li>\n<li><strong>Pop\u00fcler veya mevcut C\/C++ k\u00fct\u00fcphanelerini kullanmak<\/strong>: C\/C++ i\u00e7in uygulama geli\u015ftiriyor iseniz internet \u00fczerinde bir\u00e7ok haz\u0131r k\u00fct\u00fcphane de kullan\u0131yorsunuzdur (boost, SDL, GDAL, OpenGL, vb) ve bunlar\u0131n b\u00fcy\u00fck bir k\u0131sm\u0131n\u0131n Java portlar\u0131 da bulunmayabilir. E\u011fer bunlar\u0131 uygulaman\u0131zda kullanmak istiyorsan\u0131z da NDK takip etmeniz gereken yol.<\/li>\n<li><strong>Var olan kodu kullanmak<\/strong>: Yaz\u0131m\u0131n ba\u015f\u0131nda da bahsetti\u011fim gibi bence NDK kullan\u0131m\u0131n\u0131n en \u00f6nemli sebeplerinden biriside mevcut kodlar\u0131 h\u0131zl\u0131 bir \u015fekilde kullan\u0131labilmesine olanak sa\u011flamas\u0131. Tabi burada kodunuzun \u00e7ok fazla platform ba\u011f\u0131ml\u0131 olmamas\u0131 gerekiyor.<\/li>\n<\/ul>\n<h2><span style=\"color: #3366ff;\"><strong>Dikkat Edilmesi Gereken Di\u011fer Hususlar:<\/strong><\/span><\/h2>\n<p>\u015eimdi gelelim di\u011fer dikkat edilmesi gereken hususlara:<\/p>\n<ul>\n<li>Visual Studio kurulumu yaparken &#8220;C++ ile masa\u00fcst\u00fc uygulama geli\u015ftirme&#8221;, &#8220;C++ ile mobil uygulama geli\u015ftirme&#8221; \u015fe\u00e7eneklerini se\u00e7ti\u011finizden emin olun.<\/li>\n<li>Hedefledi\u011finiz android platformu i\u00e7in gerekli SDK&#8217;lar\u0131 (API d\u00fczeyi diye VS kurulumunda ifade ediliyor) ve sanal em\u00fclat\u00f6rleri kurun (Intel h\u0131zland\u0131r\u0131lm\u0131\u015f y\u00fcr\u00fctme y\u00f6neticisi de dahil).<\/li>\n<li>Hangi VS, hangi NDK s\u00fcr\u00fcm\u00fc ile hangi Android platformlar\u0131n\u0131 kullanacaks\u0131n\u0131z? Bunlar\u0131 belirleyin ve olabildi\u011finde de\u011fi\u015ftirmeyin. \u00d6zellikle Visual Studio g\u00fcncellemelerini yapmadan \u00f6nce gelen de\u011fi\u015fikliklere bak\u0131n. Mevcut VS ile Android NDK R13b destekleniyor ve \u015fu ana kadar bunun ile ilgili bir s\u0131k\u0131nt\u0131 ya\u015famad\u0131m.<\/li>\n<li>E\u011fer intel tabanl\u0131 bir i\u015flemciye sahip makine kullan\u0131yor iseniz. X86 tabanl\u0131 ve HAXM (Hardware Accelerated Execution Manager) kullanan bir sanal cihaz (em\u00fclat\u00f6r) olu\u015fturun. Bunlar ARM tabanl\u0131 olanlara g\u00f6re \u00e7ok daha h\u0131zl\u0131 \u00e7al\u0131\u015fmakta ve OpenGL ES 2.0 deste\u011fi de sunmaktalar. Kurulumu yukar\u0131daki se\u00e7enek ile yada <a href=\"https:\/\/software.intel.com\/en-us\/blogs\/2014\/10\/20\/how-to-ensure-you-are-using-intel-haxm-for-android-emulator\">https:\/\/software.intel.com\/en-us\/blogs\/2014\/10\/20\/how-to-ensure-you-are-using-intel-haxm-for-android-emulator<\/a>. de bahsedilen ad\u0131mlar ile ger\u00e7ekle\u015ftirebilirsiniz.<\/li>\n<li>Her zaman basit ama \u00e7al\u0131\u015fan bir \u00f6rnek elinizin kenar\u0131nda bulunsun.<\/li>\n<li>Visual Studio kullanarak \u00e7al\u0131\u015f\u0131rken yapaca\u011f\u0131n\u0131z uygulama ayarlar\u0131n\u0131 hangi platform (X86, ARM, X64) ve konfig\u00fcrasyon (Debug, Release) i\u00e7in yapt\u0131\u011f\u0131n\u0131za dikkat edin. M\u00fcmk\u00fcnse her platform ve konfig\u00fcrasyon i\u00e7in ayarlar\u0131 ger\u00e7ekle\u015ftirin ve \u00e7al\u0131\u015f\u0131r halde tutun.\n<ul>\n<li><strong>Platform\/ABI:<\/strong> Bir \u00f6nceki ba\u015fl\u0131kta anlatt\u0131\u011f\u0131m hususlara bakt\u0131 iseniz ABI&#8217;larin ne oldu\u011funu hemen hat\u0131rlayacaks\u0131n\u0131z. Mobil cihazlar\u0131n \u00e7o\u011fu farkl\u0131 i\u015flemci ve komut setleri kullanmakta. \u0130\u015fte bu ikiliye android d\u00fcnyas\u0131nda ABI (Application Binary Interface) denilmekte. Bu ABI&#8217;lar uygulaman\u0131n \u00e7al\u0131\u015fma zaman\u0131nda alt yatan alt yap\u0131 ile nas\u0131l haberle\u015fece\u011fini tan\u0131mlamakta ve ger\u00e7ekle\u015ftirmektedir. Bu konu ile ilgili daha detayl\u0131 bilgi i\u00e7in <a href=\"https:\/\/developer.android.com\/ndk\/guides\/abis.html\">https:\/\/developer.android.com\/ndk\/guides\/abis.html<\/a>&#8216;e ba\u015fvurabilirsiniz. \u015eu an desteklenen ABI&#8217;lar ve ilgili komut setleri \u015fu \u015fekilde:\n<ul>\n<li><em>armeabi<\/em> (ARMV5TE and later, Thumb-1)\n<ul>\n<li>NDK r17 ile kald\u0131r\u0131lacak.<\/li>\n<li>Visual Studio i\u00e7erisinde platform olarak yok<\/li>\n<\/ul>\n<\/li>\n<li><em>armeabi-v7a<\/em> (armeabi, Thumb-2, VFPv3-D16 Other, optional)\n<ul>\n<li>ARMv5, v6 cihazlar\u0131 ile uyumlu de\u011fil.<\/li>\n<li>Visual Studio alt\u0131nda <strong>ARM<\/strong> olarak se\u00e7ilebilir<\/li>\n<\/ul>\n<\/li>\n<li><em>arm64-v8a<\/em> (AArch-64)x86 (IA-32, MMX, SSE\/2\/3, SSSE3)\n<ul>\n<li>Visual Studio alt\u0131nda <strong>ARM64<\/strong> olarak se\u00e7ilebilir<\/li>\n<\/ul>\n<\/li>\n<li><em>x86<\/em> (IA-32, MMX, SSE\/2\/3, SSSE3)\n<ul>\n<li>Visual Studio alt\u0131nda <strong>x86<\/strong> olarak se\u00e7ilebilir<\/li>\n<\/ul>\n<\/li>\n<li><em>x86_64<\/em> (x86-64, MMX, SSE\/2\/3, SSSE3, SSE4.1, 4.2, POPCNT)\n<ul>\n<li>Visual Studio alt\u0131nda <strong>x64<\/strong> olarak se\u00e7ilebilir<\/li>\n<\/ul>\n<\/li>\n<li><em>mips<\/em> (MIPS32r1 and later)\n<ul>\n<li>NDK r17 ile kald\u0131r\u0131lacak<\/li>\n<\/ul>\n<\/li>\n<li><em>mips64<\/em> (MIPS64r6)\n<ul>\n<li>NDK r17 ile kald\u0131r\u0131lacak<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Ne tip bir proje olu\u015fturaca\u011f\u0131n\u0131z dikkat edin. VS \u00fczerinden temel olarak \u00fc\u00e7 proje geli\u015ftiriyor olacaks\u0131n\u0131z. Se\u00e7ti\u011finiz bu proje tipi \u0131\u015f\u0131\u011f\u0131nda a\u015fa\u011f\u0131da g\u00f6sterilen ayarlar ekran g\u00f6r\u00fcnt\u00fcs\u00fcndeki &#8220;Configuration Type&#8221; de\u011fi\u015fecek.\n<div id=\"attachment_217\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-217\" class=\"wp-image-217 size-medium\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow-300x208.jpg\" alt=\"\" width=\"300\" height=\"208\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow-300x208.jpg 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow-768x533.jpg 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow-500x347.jpg 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow-150x104.jpg 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow-400x278.jpg 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow-800x555.jpg 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow-200x139.jpg 200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NewProjectWindow.jpg 941w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-217\" class=\"wp-caption-text\">Visual Studio Android Proje \u015eablonlar\u0131<\/p><\/div>\n<h2><\/h2>\n<ul>\n<li><em><strong>Basic Application<\/strong><\/em>\n<ul>\n<li>Y\u00fcklenebilir Java + <em>Native<\/em>\u00a0kod i\u00e7eren bir android uygulamas\u0131 olu\u015fturman\u0131z i\u00e7in gereken proje tipidir.<\/li>\n<li>Bu projenin \u00e7\u0131kt\u0131s\u0131 android y\u00fcklenebilir paketidir.<\/li>\n<li>VS ile bu paketi VS i\u00e7erisinden ba\u011fl\u0131 olan bir donan\u0131ma veya em\u00fclat\u00f6re y\u00fckleyebilir, debug edebilirsiniz.<\/li>\n<li>Java android activity s\u0131n\u0131f\u0131 da olu\u015fturulur.<\/li>\n<li>Proje dizin yap\u0131s\u0131 ve temel s\u0131n\u0131flar otomatik olarak olu\u015fturulur (androidmanifest.xml, build.xml, Android1.java), etc.<\/li>\n<li><a href=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/BasicApp.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-220\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/BasicApp.jpg\" alt=\"\" width=\"204\" height=\"218\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/BasicApp.jpg 204w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/BasicApp-150x160.jpg 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/BasicApp-200x214.jpg 200w\" sizes=\"auto, (max-width: 204px) 100vw, 204px\" \/><\/a><\/li>\n<\/ul>\n<\/li>\n<li><em><strong>Native-Activity Application<\/strong><\/em>\n<ul>\n<li>Herhangi bir Java kodu yazmadan y\u00fcklenebilir sadece\u00a0<em>Native<\/em> temelli bir android uygulamas\u0131 olu\u015fturman\u0131z i\u00e7in gereken proje tipidir.<\/li>\n<li>Bu projenin \u00e7\u0131kt\u0131s\u0131 android y\u00fcklenebilir paketidir.<\/li>\n<li>VS ile bu paketi VS i\u00e7erisinden ba\u011fl\u0131 olan bir donan\u0131ma veya em\u00fclat\u00f6re y\u00fckleyebilir, debug edebilirsiniz.<\/li>\n<li>ANativeActivity kullanabilmeniz i\u00e7in gerekli olan haz\u0131r c dosyalar\u0131 olu\u015fturulur.<\/li>\n<li>Proje dizin yap\u0131s\u0131 ve temel s\u0131n\u0131flar otomatik olarak olu\u015fturulur (androidmanifest.xml, build.xml, android_native_app_glue.c\/h, main.cpp), etc.<\/li>\n<li><a href=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NativeApp.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-221\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NativeApp.jpg\" alt=\"\" width=\"277\" height=\"250\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NativeApp.jpg 277w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NativeApp-150x135.jpg 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/NativeApp-200x181.jpg 200w\" sizes=\"auto, (max-width: 277px) 100vw, 277px\" \/><\/a><\/li>\n<\/ul>\n<\/li>\n<li><em><strong>Android Static Library<\/strong><\/em>\n<ul>\n<li>.a uzant\u0131l\u0131 (windows platformunda .lib uzant\u0131l\u0131 olan) statik k\u00fct\u00fcphaneler olu\u015fturman\u0131za yard\u0131mc\u0131 olur.<\/li>\n<li>Bu k\u00fct\u00fcphaneleri daha sonra .so dinamik k\u00fct\u00fcphaneler veya android uygulamalar\u0131n\u0131zda kullanabilirsiniz.<\/li>\n<li>.so dinamik k\u00fct\u00fcphanelerinden farkl\u0131 olarak uygulamay\u0131 olu\u015ftururken proje ayarlar\u0131nda belirtmeniz gerekiyor.<\/li>\n<li><a href=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/StatikLib.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-222\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/StatikLib.jpg\" alt=\"\" width=\"188\" height=\"111\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/StatikLib.jpg 188w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/StatikLib-150x89.jpg 150w\" sizes=\"auto, (max-width: 188px) 100vw, 188px\" \/><\/a><\/li>\n<\/ul>\n<\/li>\n<li><em><strong>Dynamic Shared Library<\/strong><\/em>\n<ul>\n<li>Native c++ dinamik k\u00fct\u00fcphanesi olu\u015fturman\u0131z\u0131 sa\u011flar.<\/li>\n<li>\u00c7\u0131kt\u0131n\u0131n uzant\u0131s\u0131 .so olur.<\/li>\n<li>Uygulama i\u00e7erisinden ilgili API&#8217;leri kullanarak uygulama i\u00e7erisinden istedi\u011finiz zaman y\u00fckleyebilirsiniz.<\/li>\n<li><a href=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/SharedDynamicLib.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-223\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/SharedDynamicLib.jpg\" alt=\"\" width=\"237\" height=\"124\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/SharedDynamicLib.jpg 237w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/SharedDynamicLib-150x78.jpg 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/SharedDynamicLib-200x105.jpg 200w\" sizes=\"auto, (max-width: 237px) 100vw, 237px\" \/><\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Visual Studio da a\u015fa\u011f\u0131daki ayarlara dikkat edin.<\/li>\n<li><a href=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-218\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-300x162.jpg\" alt=\"\" width=\"300\" height=\"162\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-300x162.jpg 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-768x416.jpg 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-1024x555.jpg 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-500x271.jpg 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-150x81.jpg 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-400x217.jpg 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-800x433.jpg 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings-200x108.jpg 200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/Settings.jpg 1108w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>\n<ul>\n<li>Compiler\n<ul>\n<li>Android NDK r11 ile birlikte gcc \u00e7\u0131kar\u0131lacak \u015fekilde i\u015faretlenmi\u015f (ileriki s\u00fcr\u00fcmlerde \u00e7\u0131kar\u0131lacak) ve en son gcc 4.9 desteklenmekte. Gcc yerine \u015fu anda clang\/llvm desteklenmekte. Bu sebeple <strong>Clang<\/strong> kullanmakta fayda var.<\/li>\n<\/ul>\n<\/li>\n<li>STL\n<ul>\n<li>Android NDK taraf\u0131ndan mevcut s\u00fcr\u00fcmde\u00a0<a href=\"https:\/\/developer.android.com\/ndk\/guides\/cpp-support.html#libc\">libc++<\/a>,\u00a0<a href=\"https:\/\/developer.android.com\/ndk\/guides\/cpp-support.html#gnustl\">gnustl<\/a>, ve\u00a0<a href=\"https:\/\/developer.android.com\/ndk\/guides\/cpp-support.html#stlport\">stlport<\/a> desteklenmektedir. Bunlardan en g\u00fcnceli <strong>libc++<\/strong> yani (LLVM&#8217;s C++ standart k\u00fct\u00fcphanesidir), bu k\u00fct\u00fcphane ileride NDK ile kullan\u0131labilecek tek k\u00fct\u00fcphane olaca\u011f\u0131ndan bunu kullanman\u0131z\u0131 tavsiye edece\u011fim. VS ile de bir s\u0131k\u0131nt\u0131 \u00e7\u0131karmamakta, hatta en g\u00fcncel C++ standartlar\u0131n\u0131 desteklemekte. gnustl ise GCC&#8217;ye olduk\u00e7a ba\u011f\u0131ml\u0131 ve bu sebeple tercih edilmiyor. Bu \u00fc\u00e7\u00fc aras\u0131nda en eski kalan\u0131 ise stlport. stl port geli\u015ftirme faaliyetleri art\u0131k olmad\u0131\u011f\u0131ndan ve yeni C++ standartlar\u0131n\u0131 da desteklemedi\u011finden sonraki NDK s\u00fcr\u00fcmlerinde \u00e7\u0131kar\u0131lacak.<\/li>\n<li>C++ uygulamalar\u0131 i\u00e7erisinde tek bir tip STL k\u00fct\u00fcphanesi kullanmal\u0131s\u0131n\u0131z. C++ uygulamalar\u0131 i\u00e7erisinde ayn\u0131 fonksiyon veya nesnenin birden fazla kopyas\u0131n\u0131n bulunmas\u0131 g\u00fcvenli de\u011fildir. Buna <a href=\"http:\/\/en.cppreference.com\/w\/cpp\/language\/definition\">One Definition Rule<\/a>&#8216;da deniliyor.<\/li>\n<\/ul>\n<\/li>\n<li>Target API Level\n<ul>\n<li>Burada hedefledi\u011finiz<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Di\u011fer ayarlar\n<ul>\n<li>Exception deste\u011fi,\n<ul>\n<li>C\/C++ -&gt; Code Generation alt\u0131nda<\/li>\n<\/ul>\n<\/li>\n<li>C++ 0x ve 0y destekleri\n<ul>\n<li>C\/C++ -&gt; Language alt\u0131nda<\/li>\n<\/ul>\n<\/li>\n<li>Enable Run-Time Type Information\n<ul>\n<li>C\/C++ -&gt; Language alt\u0131nda<\/li>\n<\/ul>\n<\/li>\n<li>Statik k\u00fct\u00fcphane eklenme s\u0131ras\u0131 (evet bu da \u00f6nemli)\n<ul>\n<li>Linker -&gt; Input alt\u0131nda<\/li>\n<li>Uygulamay\u0131 olu\u015fturma s\u0131ras\u0131nda link hatalar\u0131 al\u0131yor iseniz ilk bakman\u0131z gereken yer buras\u0131<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>.so uzant\u0131l\u0131 dinamik k\u00fct\u00fcphanelerin ve assetlerin APK i\u00e7erisine dahil oldu\u011fundan emin olun\n<ul>\n<li>.so uzant\u0131l\u0131 dinamik k\u00fct\u00fcphaneleri VS projeleri alt\u0131ndan References alan\u0131na ekleyerek pakete dahil edebilirsiniz. Bu \u015fekilde VS i\u00e7erisinde bulunan projeleri ekleyebilirsiniz.<\/li>\n<li>Bir di\u011fer y\u00f6ntem ise el ile eklemek\n<ul>\n<li>Bir \u00f6nceki maddede anlat\u0131lan y\u00f6ntem haricinde VS de bulunmayan veya el ile eklemek istedi\u011finiz dinamik k\u00fct\u00fcphaneleri eklemek i\u00e7in izleyebilece\u011finiz bir di\u011fer y\u00f6ntem ise uygulama projesi alt\u0131nda <em><strong>libs<\/strong><\/em> dizini olu\u015fturmak.<\/li>\n<li>Burada <em><strong>libs<\/strong><\/em> dizini i\u00e7erisine uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rmay\u0131 planlad\u0131\u011f\u0131n\u0131 her bir platform i\u00e7in (<em><strong>x86_64,\u00a0x86,\u00a0armeabi-v7a ,\u00a0armeabi<\/strong>\u00a0<\/em>gibi) ilgili dizinleri\u00a0 olu\u015fturup, bu dizinler i\u00e7erisinde dinamik k\u00fct\u00fcphaneleri eklemeniz gerekmekte (her bir platform i\u00e7in dinamik k\u00fct\u00fcphaneleri olu\u015fturmal\u0131s\u0131n\u0131z, aksi takdirde uygulaman\u0131z \u00e7al\u0131\u015fmaz ya da <em>exception<\/em> yiyebilirsiniz). \u00d6rne\u011fin x86 mobil cihazlar i\u00e7in SDL.so&#8217;yu &#8220;proje dizini\/libs\/x86\/SDL.so&#8221; \u015feklinde yerle\u015ftirmelisiniz.<\/li>\n<li>Daha sonra bu dosyalar\u0131 VS projesi i\u00e7erisine de eklemelisiniz, aksi takdirde paket i\u00e7erisine eklenmezler.<\/li>\n<\/ul>\n<\/li>\n<li>Android NDK uygulamalar\u0131 varsay\u0131lan olarak uygulamada kullanaca\u011f\u0131n\u0131z dosyalar i\u00e7in <em><strong>assets<\/strong><\/em> dizini i\u00e7erisine bakar. Bu dizine eklenen verileri pakete dahil etmek i\u00e7in bir .so dosyalar\u0131 gibi bunlar\u0131n da VS e eklenmesi gerekmekte.<\/li>\n<\/ul>\n<\/li>\n<li>AndroidManifest.xml ayarlar\u0131:\n<ul>\n<li>Aktivite ismini do\u011fru girdi\u011finizden emin olun (\u00f6rne\u011fin &#8221; &lt;activity android:name=&#8221;.SDL2_Application&#8221; &#8230; &#8220;)<\/li>\n<li>Gerekli haklar\u0131 tan\u0131mlay\u0131n<\/li>\n<li>En az ve en fazla desteklenen hedef android platformlar\u0131n\u0131 girin ve bunlar\u0131n VS Target API level ile uyumlu oldu\u011fundan emin olun.<\/li>\n<\/ul>\n<\/li>\n<li>Ve son olarak sab\u0131rl\u0131 olun. E\u011fer normalde \u00e7al\u0131\u015fan veya \u00e7al\u0131\u015fmas\u0131 gerekti\u011fini d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fcz bir durum var ise biraz ara verin ya da temiz bir kurulum ile tekrar deneyin. Sab\u0131rl\u0131 olun (tekrar \ud83d\ude42<\/li>\n<\/ul>\n<p><strong>G\u00fcncelleme (01\/07\/2018):<\/strong><\/p>\n<p>Evet arkada\u015flar uygulamalar\u0131n\u0131z geli\u015ftirdikten sonra ihtiya\u00e7 duyaca\u011f\u0131n\u0131z hususlardan birisi de dinamik k\u00fct\u00fcphanelerin kod i\u00e7erisinde y\u00fcklenmesi buraya kadar her \u015fey a\u00e7\u0131k. Gel g\u00f6rki\u00a0<em>dlopen\u00a0<\/em>API&#8217;si ile <em>libs<\/em>\u00a0dizinine ekledi\u011finiz .so k\u00fct\u00fcphanelerinizi y\u00fcklemeniz i\u00e7in kullanaca\u011f\u0131n\u0131z adres ile ilgili ufak bir ayr\u0131nt\u0131 var. O da bu k\u00fct\u00fcphanelerin android i\u015fletim sistem i\u00e7erisinde &#8220;\/data\/data\/PackageName\/lib\/&#8221; dizini alt\u0131na yerle\u015ftirildi\u011fi \ud83d\ude42 Burada PackageName sizin uygulaman\u0131z ismi (\u00f6r.<strong> com.SDL_Application<\/strong> bunun i\u00e7in <a href=\"http:\/\/www.yazilimperver.com\/index.php\/2018\/01\/06\/visual-studio-2017-ile-ucuncu-parti-cc-kutuphanelerin-sdl-android-icin-olusturulmasi\/\">github&#8217;a <\/a>koydu\u011fum SDL kodu i\u00e7erisine bir API ekledim, oradan dinamik olarak uygulaman\u0131z\u0131n paket ismini \u00f6\u011frenebilirsiniz. Evet biraz bulmas\u0131 zor oldu keza kendisi bir implementasyon detay\u0131 imi\u015f :)<\/p>","protected":false},"excerpt":{"rendered":"<p>Evet arkada\u015flar C++, GitHub derken nereden \u00e7\u0131kt\u0131 bu NDK diyebilirsiniz ama e\u011fer elinizde haz\u0131r C++ k\u00fct\u00fcphaneleriniz var ve bunu h\u0131zl\u0131 ve performansl\u0131 bir \u015fekilde Android platformunda kullanmak istiyorsan\u0131z en iyi y\u00f6ntem NDK (Native Development Kit).\u00a0 NDK her ne kadar google taraf\u0131ndan resmi olarak \u00f6nerilmese de, y\u00fcksek performans ve \u00e7oklu platform deste\u011fi i\u00e7in olmazsa olmaz. Ben&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":224,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[165,10,54,11],"tags":[55,13,61,59,60,57,56,58],"class_list":["post-208","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-c","category-mobile","category-visual-studio","tag-android","tag-c","tag-llvm","tag-mobil-software-development","tag-mobile","tag-native","tag-ndk","tag-visual-studio"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet arkada\u015flar C++, GitHub derken nereden \u00e7\u0131kt\u0131 bu NDK diyebilirsiniz ama e\u011fer elinizde haz\u0131r C++ k\u00fct\u00fcphaneleriniz var ve bunu h\u0131zl\u0131 ve performansl\u0131 bir \u015fekilde Android platformunda kullanmak istiyorsan\u0131z en iyi y\u00f6ntem NDK (Native Development Kit).\u00a0 NDK her ne kadar google taraf\u0131ndan resmi olarak \u00f6nerilmese de, y\u00fcksek performans ve \u00e7oklu platform deste\u011fi i\u00e7in olmazsa olmaz. Ben... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-04T17:39:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-03-04T19:02:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/indir.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"232\" \/>\n\t<meta property=\"og:image:height\" content=\"217\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/30ee263812776c4abb84418d028b5ef4\"},\"headline\":\"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :)\",\"datePublished\":\"2018-01-04T17:39:45+00:00\",\"dateModified\":\"2019-03-04T19:02:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/\"},\"wordCount\":5433,\"commentCount\":7,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"android\",\"c++\",\"llvm\",\"mobil software development\",\"mobile\",\"native\",\"ndk\",\"Visual Studio\"],\"articleSection\":[\"Android\",\"C++\",\"Mobile\",\"Visual Studio\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/\",\"name\":\"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2018-01-04T17:39:45+00:00\",\"dateModified\":\"2019-03-04T19:02:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/30ee263812776c4abb84418d028b5ef4\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1fba597722a6cfbfac6eb03b348b1f5065b583004abb13322f432c3f00276b3f?s=96&d=wp_user_avatar&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1fba597722a6cfbfac6eb03b348b1f5065b583004abb13322f432c3f00276b3f?s=96&d=wp_user_avatar&r=g\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"description\":\"\u00d6\u011frenmeyi ve payla\u015fmay\u0131 seven bir yaz\u0131l\u0131mperver :)\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/","og_locale":"tr_TR","og_type":"article","og_title":"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet arkada\u015flar C++, GitHub derken nereden \u00e7\u0131kt\u0131 bu NDK diyebilirsiniz ama e\u011fer elinizde haz\u0131r C++ k\u00fct\u00fcphaneleriniz var ve bunu h\u0131zl\u0131 ve performansl\u0131 bir \u015fekilde Android platformunda kullanmak istiyorsan\u0131z en iyi y\u00f6ntem NDK (Native Development Kit).\u00a0 NDK her ne kadar google taraf\u0131ndan resmi olarak \u00f6nerilmese de, y\u00fcksek performans ve \u00e7oklu platform deste\u011fi i\u00e7in olmazsa olmaz. Ben... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2018-01-04T17:39:45+00:00","article_modified_time":"2019-03-04T19:02:42+00:00","og_image":[{"width":232,"height":217,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/01\/indir.jpg","type":"image\/jpeg"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/30ee263812776c4abb84418d028b5ef4"},"headline":"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :)","datePublished":"2018-01-04T17:39:45+00:00","dateModified":"2019-03-04T19:02:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/"},"wordCount":5433,"commentCount":7,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["android","c++","llvm","mobil software development","mobile","native","ndk","Visual Studio"],"articleSection":["Android","C++","Mobile","Visual Studio"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/","name":"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2018-01-04T17:39:45+00:00","dateModified":"2019-03-04T19:02:42+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2018\/01\/04\/android-ndk-ile-ugrasirken-dikkat-edilecekler\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Android NDK ile u\u011fra\u015f\u0131rken dikkat edilecekler :)"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}},{"@type":"Person","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/30ee263812776c4abb84418d028b5ef4","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1fba597722a6cfbfac6eb03b348b1f5065b583004abb13322f432c3f00276b3f?s=96&d=wp_user_avatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1fba597722a6cfbfac6eb03b348b1f5065b583004abb13322f432c3f00276b3f?s=96&d=wp_user_avatar&r=g","caption":"yaz\u0131l\u0131mperver"},"description":"\u00d6\u011frenmeyi ve payla\u015fmay\u0131 seven bir yaz\u0131l\u0131mperver :)"}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=208"}],"version-history":[{"count":10,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/208\/revisions"}],"predecessor-version":[{"id":1024,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/208\/revisions\/1024"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/224"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}