知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?
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)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站建設(shè)
- 報(bào)廢車
- 汽車回收系統(tǒng)
- 搜索引擎優(yōu)化
- 出入小程序
- 網(wǎng)站建設(shè)專家
- 關(guān)鍵詞快速排名
- 小程序開發(fā)聯(lián)系方式
- 網(wǎng)站優(yōu)化哪家好
- uniapp開發(fā)小程序
- 小程序退款
- 網(wǎng)站上首頁
- 小程序制作
- 云南網(wǎng)站建設(shè)開發(fā)
- 云南網(wǎng)站建設(shè)服務(wù)公司
- 二叉樹
- 云南網(wǎng)站建設(shè)首頁
- 開發(fā)制作小程序
- 網(wǎng)站搭建
- 生成海報(bào)
- 昆明網(wǎng)站開發(fā)
- 云南軟件定制
- 昆明做網(wǎng)站
- 小程序開發(fā)費(fèi)用
- 網(wǎng)頁制作
- 小程序被騙退款成功
- php網(wǎng)站
- 網(wǎng)站建設(shè)電話
- 百度小程序
- 云南軟件開發(fā)