bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

ndk調(diào)用java代碼 jdk ndk sdk

ndk生成的so怎么在java調(diào)用

1. 自己寫.c文件,然后生成so庫(kù)

創(chuàng)新互聯(lián)公司專注于蔡甸網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供蔡甸營(yíng)銷型網(wǎng)站建設(shè),蔡甸網(wǎng)站制作、蔡甸網(wǎng)頁(yè)設(shè)計(jì)、蔡甸網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造蔡甸網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供蔡甸網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

2. 引用別人的鏈?zhǔn)朱o態(tài)庫(kù),或者動(dòng)態(tài)庫(kù)來(lái)生成新的jni調(diào)用庫(kù)。

我們先來(lái)看最簡(jiǎn)單的編寫一個(gè)jni調(diào)用的so庫(kù),包含一個(gè)獲棚讓嫌取字符串的方法,通過(guò)這個(gè)列子,我們主要是了解怎滑仔么在android的工程中調(diào)用jni的庫(kù),以及要注意的問題。

第一步:首先我們來(lái)看下我們的工程的目錄

jni目錄是我們生成庫(kù)的文件,里面包含了一個(gè).mk編譯文件以及一系列的.c文件

libs目錄是我們編譯jni目錄下的mk文件動(dòng)態(tài)生成的。

當(dāng)我們寫好了jni下面的庫(kù)文件以后,在當(dāng)前目錄下執(zhí)行ndk-build則會(huì)自動(dòng)生成我們需要調(diào)用的.so庫(kù)文件。

第二步: java里面怎么調(diào)用jni的庫(kù)文件,我們先看代碼

public class MainActivity extends Activity {

/* A native method that is implemented by the

* 'hello-jni' native library, which is packaged

* with this application.

*/

public native String stringFromJNI();

/* this is used to load the 'hello-jni' library on application

* startup. The library has already been unpacked into

* /data/data/com.example.HelloJni/lib/libhello-jni.so at

* installation time by the package manager.

*/

static {

System.loadLibrary("hello-jni");

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

String str = stringFromJNI();

System.out.println("*****str:" + str);

}

}

在java文件中要做到調(diào)用jni文件生成的so庫(kù),需要做到2步

android ndk 開發(fā),C++ 調(diào)用Java的方法

Android.mk文件:

LOCAL_SRC_FILES參數(shù)用空格隔開

[c-sharp]?view plaincopyprint?

LOCAL_PATH:=$(call?my-dir)

include?$(CLEAR_VARS)

LOCAL_MODULE:=native

LOCAL_SRC_FILES:=geolo.cpp?my_jni.h

include?$(BUILD_SHARED_LIBRARY)

2. geolo.cpp

先用FindClass方法找到則激禪java類,鉛胡有點(diǎn)類似java的反射用LoadClass

再用CallObjectMethod方法調(diào)用Java類的函數(shù)。

[c-sharp]?view plaincopyprint?

#include?"my_jni.h"

jobject?getInstance(JNIEnv*?env,?jclass?obj_class){

jmethodID?construction_id?=?env-GetMethodID(obj_class,?"init",?"()V");

jobject?obj?=?env-NewObject(obj_class,?construction_id);

return?obj;

}

JNIEXPORT?jstring?JNICALL?Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv*?env,?jobject?thiz){

jstring?str;

jclass?java_class?=?env-FindClass("com/easepal/geolo/CForCall");

if?(java_class?==?0){

return?env-NewStringUTF("not?find?class!");

}

jobject?java_obj?=?getInstance(env,?java_class);

if?(java_obj?==?0){

return?env-NewStringUTF("not?find?java?OBJ!");

}

jmethodID?java_method?=?env-GetMethodID(java_class,?"GetJavaString",?"()Ljava/lang/String;");

if(java_method?==?0){

return?env-NewStringUTF("not?find?java?method!");

}

str?=?(jstring)env-CallObjectMethod(java_obj,?孫塵java_method);

return?str;

}

3. my_jni.h

[c-sharp]?view plaincopyprint?

/*?DO?NOT?EDIT?THIS?FILE?-?it?is?machine?generated?*/

#include?jni.h

/*?Header?for?class?com_easepal_geolo_CActivityMain?*/

#ifndef?_Included_com_easepal_geolo_CActivityMain

#define?_Included_com_easepal_geolo_CActivityMain

#ifdef?__cplusplus

extern?"C"?{

#endif

/*

*?Class:?????com_easepal_geolo_CActivityMain

*?Method:????stringFromJNI

*?Signature:?()Ljava/lang/String;

*/

JNIEXPORT?jstring?JNICALL?Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv?*,?jobject);

#ifdef?__cplusplus

}

#endif

#endif

4.?CActivityMain.java

[c-sharp]?view plaincopyprint?

package?com.easepal.geolo;

import?android.app.Activity;

import?android.os.Bundle;

import?android.widget.TextView;

public?class?CActivityMain?extends?Activity?{

/**?Called?when?the?activity?is?first?created.?*/

@Override

public?void?onCreate(Bundle?savedInstanceState){

super.onCreate(savedInstanceState);

TextView?tv?=?new?TextView(this);

tv.setText(?stringFromJNI("hello")?);

setContentView(tv);

}

static?{

System.loadLibrary("native");

}

public?native?String?stringFromJNI(String?str);

}

5.?CForCall.java

[c-sharp]?view plaincopyprint?

package?com.easepal.geolo;

public?class?CForCall{

public?CForCall(){};

//public?~CForCall(){};

public?String?GetJavaString(){

String?str;

str?=?"123456";

return?str;

}

}

Qt for Android生成的so庫(kù),在Java for Android中被調(diào)用,請(qǐng)問有什么思路嗎?

可以調(diào)用,但是不能直接調(diào)用,要通過(guò)代碼目的JNI去調(diào)用,在JNI中導(dǎo)入頭文件,通過(guò)NDK編譯成功后即可。

NDK編譯步驟:

1.選擇 ndk 自帶的例子 hello-jni ,我的雀裂敗位于E:\android-ndk-r5\samples\hello-jni( 根據(jù)具體的安裝位置而定 ) 。

2.運(yùn)頃顫行 cygwin ,輸入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,進(jìn)入到 E:\android-ndk-r5\samples\hello-jni 目錄。

3.輸入源納 $NDK/ndk-build ,執(zhí)行成功后,它會(huì)自動(dòng)生成一個(gè) libs 目錄,把編譯生成的 .so 文件放在里面。 ($NDK是調(diào)用我們之前配置好的環(huán)境變量, ndk-build 是調(diào)用 ndk 的編譯程序 )

4.此時(shí)去 hello-jni 的 libs 目錄下看有沒有生成的 .so 文件,如果有,ndk 就運(yùn)行正常啦。

新聞名稱:ndk調(diào)用java代碼 jdk ndk sdk
文章網(wǎng)址:http://vcdvsql.cn/article48/ddpsgep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化網(wǎng)站內(nèi)鏈網(wǎng)站設(shè)計(jì)公司網(wǎng)站改版外貿(mào)建站企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司