ÀÖÓãµç¾º

    ½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

    È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

    AndroidÅàѵʵս½Ì³ÌÖ® StudioÏÂJNI¿ª·¢

    ¸üÐÂʱ¼ä: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

    Îı¾¿ò: ͼ1-JNIºÍNDKµÄ¹ØÏµ
     

    ¡¡¡¡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Îļþ¼Ð

    step4:ÔÚjniÎļþ¼ÐÏÂн¨c/c++Ô´Îļþ£¬ÕâÀïн¨ÁËhello-jni.hºÍhello-jni.c

    ¿ÉÑ¡.c/.hÓÃCÓïÑÔʵÏÖ£¬»òÕß.cpp/.hÓÃC++ÓïÑÔʵÏÖ
    н¨Íê³ÉºóµÃµ½hello-jni.cÔ´ÎļþºÍÏà¹ØµÄhello-jni.hÍ·Îļþ
     
     
    step5: ±àÒëÒ»ÏÂmodule testini£¬Éú³É.class×Ö½ÚÂëÎļþ£¬½øÈëtestjni\build\intermediates\classes\debugĿ¼Ï£¬ÔÚTerminal´°¿ÚÀûÓÃjavahÃüÁîÉú³ÉjniÏà¹ØÍ·Îļþ

     
     
    Terminal´°¿ÚÖÐÖ´ÐÐÃüÁî> javah    ´æ·ÅJNIÀàµÄ°üÃû.JNIÀàÃû

     
    Éú³Écom_itheima_jni_JNI.hÍ·Îļþ£¬½«Õâ¸öÍ·Îļþ¿½±´µ½jniÎļþ¼ÐÏÂ
     
    ÔÚhello-jni.cÎļþ¿ªÍ·°üº¬Éú³ÉµÄÍ·Îļþcom_itheima_jni_JNI.h
    #include "com_itheima_jni_JNI.h" //°üº¬Éú³ÉµÄÍ·Îļþ
    ²¢½«com_itheima_jni_JNI.hÍ·ÎļþÖÐ,±¾µØ·½·¨¶ÔÓ¦º¯ÊýÉùÃ÷¿½±´µ½hello-jni.cÎļþÖУ¬·½±ãÏÂÒ»²½À´ÊµÏÖÕâ¸öº¯Êý
    step6:ʵÏÖ±¾µØ·½·¨ÏàÓ¦µÄJava_com_itheima_jni_JNI_helloFromCº¯Êý¹¦ÄÜ£¬·µ»ØÒ»¸öJavaÖеÄString×Ö·û´®¶ÔÏó
     
    
    

    ¡¡¡¡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); }

     
    step7£ºÐèÒª¸øAndroid StudioÖ¸¶¨NDK·¾¶
     
    step8:ÔÚmoduleµÄbuild.gradleÎļþÖÐÖ¸¶¨Éú³ÉµÄ.so¶¯Ì¬¿âÃûhello-jni£¬Õâ¸ö¿âÃûÐèÒªÔÚJNIÀàÖмÓÔØ

    ¡¡¡¡ÔÚ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ÕÕ°ì¡£


    ÔٴαàÒë³É¹¦£¬²¿Êðµ½Ä£ÄâÆ÷ÉÏ¿´Ð§¹û
     
    Á÷³Ìµ½´Ë½áÊø¡£
    ºóÃæÔÙ¸üʵÑéÐÔgradle²å¼þ¿ª·¢jniʱÓжàÇ¿´ó£¡
     
     
     

    ²Î¿¼£º

    https://zh.wikipedia.org/wiki/Android_Studio

    ±¾ÎİæÈ¨¹éÀÖÓã²¥¿ÍAndroidÅàѵѧԺËùÓУ¬»¶Ó­×ªÔØ£¬×ªÔØÇë×¢Ã÷×÷Õß³ö´¦¡£Ð»Ð»£¡
    ×÷ÕߣºÀÖÓã²¥¿ÍAndroidÅàѵѧԺ
    Ê×·¢£ºhttp://www.itcast.cn/android/
    0 ·ÖÏíµ½£º
    ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
    ¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿