欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

JNI由淺入深_3_HelloWorld - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

JNI由淺入深_3_HelloWorld

發(fā)表時間:2020-10-19

發(fā)布人:葵宇科技

瀏覽次數(shù):70

1、須要預(yù)備的對象,eclipse,cdt(c++)插件,cygwin(unix)和 android ndk.


  在cygwin的etc目次下將ndk的路徑惹人到profile文件中,可以在cygwin的任何目次都可以拜訪到ndk,不合的ndk路徑PATH的寫法不合.
  : ${ORIGINAL_PATH=${PATH}}
  if [ ${CYGWIN_NOWINPATH-addwinpath} = "addwinpath" ] ; then
    PATH="/usr/local/bin:/cygdrive/d/cgwin/android-ndk-r7b:/usr/bin${PATH:+:${PATH}}"
  else
    PATH="/usr/local/bin:/usr/bin:/cygdrive/d/cgwin/android-ndk-r7b"
  fi

2、開辟步調(diào):
a.創(chuàng)建一個android工程
b.JAVA代碼中寫聲明 native 辦法 public native String helloFromJNI(); 經(jīng)由過程javah  包名.類名生成jni的辦法簽名
c. 創(chuàng)建jni目次,編寫c代碼,辦法名字要對應(yīng)?;蛘邔⑸傻暮灻募截惖絡(luò)ni目次,然后在c代碼中惹人。
d.編寫Android.mk文件
e.Ndk編譯生成動態(tài)庫( ndk -build )
f.Java代碼load 動態(tài)庫.調(diào)用native代碼

  2.1 創(chuàng)建一個Android項(xiàng)目,創(chuàng)建native辦法.


public class MainActivity extends Activity {
    static{
        //加載二進(jìn)制文件
        System.loadLibrary("Hello");//libHello.so 去掉落lib和so
    } 
    public native String helloFormC();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        System.out.println("------------"+helloFormC());
    }

}

2.2 javah敕令生成簽名


進(jìn)入到項(xiàng)目標(biāo)bin/classes敕令下,履行敕令 javah com.example.jni.MainActivity,將生成的頭文件拷貝到j(luò)ni目次下,在c文件中惹人頭文件 #include "com_example_jni_MainActivity.h" 。下面是javah敕令的參數(shù) 和 臨盆頭文件方法。
[img]http://images.cnitblog.com/i/502866/201405/311052014161494.png
[img]http://images.cnitblog.com/i/502866/201405/311052170256324.png
 在應(yīng)用javah敕令時如不雅碰到找不到Activity類,解釋android的jar包沒有導(dǎo)入進(jìn)去,一種辦法將jar包參加到classpath路徑中去,classpath   .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\tools.jar;E:\developLib\android\platforms\android-8\android.jar;另一種辦法是在window敕令窗口履行:D:\project3\JNIAndroid>set classpath=D:\project3\JNIAndroid\src。

   2.3 創(chuàng)建C文件


jobject  就是當(dāng)前辦法地點(diǎn)的類代表的對象.JNIEnv類型代表了java情況 經(jīng)由過程JNIEnv* 指針,就可以對java端的代碼進(jìn)行操作.
#include <stdio.h>
#include <jni.h>
#include <malloc.h>
#include "com_example_jni_MainActivity.h";

JNIEXPORT jstring JNICALL Java_com_example_jni_MainActivity_helloFormC
  (JNIEnv * env, jobject obj){

    return (*env)->NewStringUTF(env,"hello from c ... ");
}

  2.4 編譯


經(jīng)由過程cygwin編譯c文件,進(jìn)入到項(xiàng)目目次,我的項(xiàng)目名稱是jni,進(jìn)入之后履行“ndk-build”敕令,出現(xiàn)如下圖所示表示履行成功。
[img]http://images.cnitblog.com/i/502866/201405/311055211036387.png

  2.5 創(chuàng)建Android.mk文件


須要將hello-jni調(diào)換成本身的c文件模塊名稱,在ndk中的地位 file:///D:/cgwin/android-ndk-r7b/docs/ANDROID-MK.html:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    :=Hello
LOCAL_SRC_FILES :=Hello.c
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)

LOCAL_LDLIBS += -llog表示在jni中打印日記信息,次信息在android控制臺上可以看到。須要在c文件中參加如下代碼:
#include <android/log.h>
#define LOG_TAG "System.out.c"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)

2.6 在android項(xiàng)目中的java文件惹人編譯生成的二進(jìn)制文件。


static{
        //加載二進(jìn)制文件
        System.loadLibrary("Hello");//libHello.so 去掉落lib和so
}

  2.7 最后安排項(xiàng)目,運(yùn)行。

相關(guān)案例查看更多