¸üÐÂʱ¼ä:2015Äê12ÔÂ28ÈÕ15ʱ22·Ö À´Ô´:ÀÖÓã²¥¿ÍAndroidÅàѵѧԺ ä¯ÀÀ´ÎÊý:
¡¡¡¡Ò»²½Ò»²½×öAndroid StudioÏÂJNI¿ª·¢
¡¡¡¡Android StudioÊÇGoogle»ùÓÚIntelliJ IDEAרÃÅΪAndroid¿ª·¢¶ø¶¨ÖƵļ¯³É¿ª·¢»·¾³¡£ÔÚ2013Äê5ÔµÄGoogle´ó»áÉÏÊ״η¢²¼¡£GoolgeÐû²¼2015Äêµ×¾ÍÖÐÖ¹Eclipse¹Ù·½Ö§³Ö£¬ËùÒÔÊÇʱºòÓµ±§Android StudioÁË¡£
¡¡¡¡ÏÈÀ´¿´ÏÂÏà¹ØÖªÊ¶±³¾°
¡¡¡¡1.ʲôÊÇJNI?
¡¡¡¡Java native interfaceÊÇÒ»ÖÖÐÒ飬²¢ÌṩһÌ×±à³Ì¿ò¼Ü£¬ÈÃjavaºÍ±¾µØÓïÑÔ(C/C++)Ö®¼äÄܹ»Ï໥µ÷Óá£
¡¡¡¡2.ΪʲôÐèÒªJNIÄØ?
¡¡¡¡JavaÊÇÒ»ÖÖÆ½Ì¨Î޹صÄÓïÑÔ£¬Í¨¹ý²»Í¬²Ù×÷ϵͳϾßÓÐÏàͬ¹¦ÄܵÄJVMʵÏÖÒ»´Î±àÒ룬¿ÉÒÔµ½´¦ÔËÐС£Ò²ÕýÊÇÒòΪJVM£¬Ê¹µÃJava³ÌÐòÔËÐеÄЧÂÊÏà¶ÔÓÚC/C++µÈ±¾µØÓïÑԽϵͣ¬¶øÇÒ²»ÄÜÏñC/C++Ò»ÑùÖ±½Ó²Ù×÷µ×²ãÓ²¼þ¡£ÒòΪC/C++±¾µØÓïÑÔ±àÒë³ÌÐòÊÇÖ±½Ó±»²Ù×÷ϵͳÔËÐУ¬¶ø²»ÐèÒªÀàËÆJavaµÄÐéÄâ»ú¡£
¡¡¡¡ËùÒÔÈç¹ûAndroid appÐèÒª²Ù×÷µ×²ãÓ²¼þ£¬»òÒªÇóÓ¦ÓõÄÔËÐÐЧÂÊ£¬°²È«ÐÔ£¬¾Í¿ÉÒÔʹÓÃJNIÀ´ÊµÏÖjavaºÍ±¾µØC/C++ÓïÑÔÖ®¼äµÄÏ໥µ÷Óá£
¡¡¡¡3.ÄÇʲôÊÇNDKÄØ?
¡¡¡¡Native Development Kit ±¾µØ¿ª·¢¹¤¾ß¼¯¡£¼òµ¥µÄ˵¾ÍÊÇÒ»ÕûÌ×¹¤¾ß£¬ÓÃÀ´¹¹½¨¡¢±àÒë±¾µØc/c++Ô´³ÌÐò£¬Éú³É.so¶¯Ì¬¿â£¬¼ÓÈë±¾µØ¿âÖУ¬ÈÃAndroidÓ¦ÓóÌÐòÖÐJava³ÌÐòͨ¹ýjniµ÷Óá£
¡¡¡¡JNIºÍNDK¹ØÏµ¼ûͼ1


¡¡¡¡4.ÔõÑù½øÐÐJNI¿ª·¢ÄØ?
¡¡¡¡Ö®Ç°´ó¼ÒʹÓÃEclipse+CDT+NDK½øÐÐJNI¿ª·¢£¬×ªµ½Android StudioºóÔõÑùÀ´½øÐÐJNI¿ª·¢ÄØ?
¡¡¡¡ÐèÒªÖ¸³öµÄÊÇAndroid Studioµ±Ç°¶ÔNDKµÄÖ§³Ö»¹´¦ÓÚ²âÊԽ׶Σ¬»¹Î´²úÉúÎȶ¨µÄÖ§³Ö¡£Ëæ×ÅAndroid Studio°æ±¾µÄÉý¼¶£¬¿ª·¢·½Ê½»¹Ôڱ仯¡£±¾ÎÄʹÓõĻ·¾³ÊÇAndroid Studio1.4Îȶ¨°æ£¬gradle 2.4¡£
¡¡¡¡ÏÂÃæ¾Íͨ¹ýÒ»¸ö¼òµ¥µÄÀý×Ó½éÉÜÔõÑùÓÃAndroid Studio½øÐÐJNI¿ª·¢¡£
¡¡¡¡ÏÈÉÏЧ¹û¼ûͼ2
¡¡¡¡Àý×Ӻܼòµ¥£¬androidÓ¦ÓóÌÐòTestJniÖÐjava½èÖúJNIµ÷Óñ¾µØCº¯Êý£¬»ñµÃÒ»¸ö×Ö·û´®£¬²¢ÓÃToastÌáʾÔÚ½çÃæÉÏ¡£
¡¡¡¡step1:Ê×ÏÈн¨Ò»¸öModuleÄ£¿é,TestJni,н¨Ò»¸ö°ücom.itheima.jni
¡¡¡¡£¬ºÍÒ»¸öרÃÅ´æ·Å±¾µØ·½·¨µÄÀàJNI¡£È»ºóÓÃnative¹Ø¼ü×ÖÉùÃ÷±¾µØ·½·¨helloFromC
¡¡¡¡package com.itheima.jni; /** * Created by tim on 2015/12/15. */ public class JNI {
¡¡¡¡//±¾µØ·½·¨»ñµÃ×Ö·û´®,±¾µØ·½·¨ÓÉc/c++ʵÏÖ public static native String helloFromC(); }
¡¡¡¡step2:ÔÚMainActivityÀàÖе÷ÓÃJNIÀàÖеı¾µØ·½·¨£¬»ñµÃ×Ö·û´®£¬²¢ÓÃToast´òÓ¡Êä³ö
¡¡¡¡package com.itheima.testjni; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import
¡¡¡¡android.widget.Toast; import com.itheima.jni.JNI; public class MainActivity extends AppCompatActivity {
¡¡¡¡@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); JNI jni = new JNI(); Toast.makeText(this, jni.helloFromC(), Toast.LENGTH_SHORT).show(); } }¡¡¡¡step3:ÔÚtestjniÄ£¿éÖÐн¨´æ·ÅcÔ´ÎļþµÄjniÎļþ¼Ð










#include "com_itheima_jni_JNI.h" //°üº¬Éú³ÉµÄÍ·Îļþ²¢½«com_itheima_jni_JNI.hÍ·ÎļþÖÐ,±¾µØ·½·¨¶ÔÓ¦º¯ÊýÉùÃ÷¿½±´µ½hello-jni.cÎļþÖУ¬·½±ãÏÂÒ»²½À´ÊµÏÖÕâ¸öº¯Êý

¡¡¡¡JNIEXPORT jstring JNICALL Java_com_itheima_jni_JNI_helloFromC
¡¡¡¡(JNIEnv * env, jclass obj){
¡¡¡¡char buf[] = "Hello world from C!";
¡¡¡¡//envµ÷ÓÃstruct JNINativeInterfaceÖеĺ¯ÊýÖ¸Õë
¡¡¡¡//ʵÏÖת»»cÀïÃæµÄchar *×Ö·û´®ÎªjavaÖеÄString¶ÔÏó
¡¡¡¡return (*env)->NewStringUTF(env, buf); }



¡¡¡¡ÔÚdefaultConfig{}ÖÐÌí¼Óndk{}
¡¡¡¡defaultConfig { applicationId "com.itheima.testjni" minSdkVersion 10 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk{ //Ö¸¶¨Éú³ÉÄ£¿éÃû×Ö,Ò²¾ÍÊÇ×îÖյĶ¯Ì¬¿âÃûhello-jni,ÏàÓ¦¿âÎļþÃûlibhello-jni.so moduleName "hello-jni" //Ö¸¶¨Éú³ÉÄÄЩ´¦ÀíÆ÷¼Ü¹¹µÄ¶¯Ì¬¿âÎļþ£¬Èç¹ûÒªÔËÐÐÔÚx86¼Ü¹¹´¦ÀíÆ÷Ò»¶¨ÐèÒªÖ¸¶¨ abiFilters "armeabi" , "x86" } }
¡¡¡¡step9:ÔÚJNIÀàÖмÓÔØ¶¯Ì¬¿â
¡¡¡¡package com.itheima.jni; /** * Created by tim on 2015/12/15. */ public class JNI { static{ //Ö¸¶¨¿âÃû£¬¼ÓÔØ¶¯Ì¬¿â£¬ÐèÒªºÍbuild.gradleÖÐÖ¸¶¨µÄ¿âÃûÒ»Ö System.loadLibrary("hello-jni"); } //±¾µØ·½·¨»ñµÃ×Ö·û´®,±¾µØ·½·¨ÓÉc/c++ʵÏÖ public static native String helloFromC(); }
¡¡¡¡step10:±àÒëÕâ¸öÄ£¿é

¡¡¡¡µÈ´ý½á¹û......½á¹û£¬ÄÉÄá?±àÒ뱨´íÁË!
¡¡¡¡Error:(14, 1) A problem occurred evaluating project ':testjni'.
¡¡¡¡> Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.
¡¡¡¡com/tech-docs/new-build-system/gradle-experimental. Set "android.useDeprecatedNdk=true" in gradle.
¡¡¡¡properties to continue using the current NDK integration.
¡¡¡¡µ¶¨!
¡¡¡¡×Ðϸһ¶Á£¬ÔÀ´ÊÇNDK¼¯³ÉÔÚµ±Ç°Gradle²å¼þÖÐÆúÓ㬽¨ÒéÓÃеÄʵÑéÐÔ²å¼þ£¬»òÕßÔÚ¹¤³ÌÖÐgradle.proertiesÖÐÉèÖÃandroid.useDeprecatedNdk=true
¡¡¡¡okÕÕ°ì¡£


AndroidÅàѵʵս½Ì³Ì֮ʹÓÃActionBar´î½¨Android UI¿ò¼Ü
2015-12-28AndroidÅàѵʵս½Ì³Ì֮ģÄâÆ÷¼ÓËÙÆ÷°²×°
2015-12-28AndroidÅàѵʵս½Ì³ÌÖ®½ø³ÌºÍÏß³ÌÏê½â
2015-12-28AndroidÅàѵʵս½Ì³ÌÖ®¶à´Î½â°óÅ׳öÒì³£ÔÒò
2015-12-28AndroidÅàѵʵս½Ì³ÌÖ®WebView°¸Àý·ÖÎö
2015-12-28AndroidÅàѵʵս½Ì³ÌÖ®javaÏ̳߳Ø×ܽá
2015-12-28
±±¾©Ð£Çø