欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android調(diào)用jni,android調(diào)用jni讀取內(nèi)存

android怎么用APK調(diào)用JNI簡單實例

制作Android的內(nèi)置APK,調(diào)用C或者C++去調(diào)用底層接口:

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名申請虛擬主機、營銷軟件、網(wǎng)站建設(shè)、饒平網(wǎng)站維護、網(wǎng)站推廣。

環(huán)境配置:

eclipse要配置NDK插件和系統(tǒng)環(huán)境,我用的是WIN7,先去下載NDK,解壓后就是一個目錄,把路徑記住,去XP電腦配置下環(huán)境,就像配置Java環(huán)境一樣,把路徑寫到系統(tǒng)環(huán)境的PATH就好了(這樣就可以編譯JNI了)。然后在配置eclipse的NDK插件,點擊eclipse的WINDOW/PREFERNCES,彈出框了后點擊android/NDK,有個路徑選擇,一樣選擇你下載好解壓的目錄(選擇后提示不是有效的NDK目錄的時候,你在NDK目錄里面新建一個文件,名字寫:ndk-build,沒有后綴)

如何在Android下使用JNI

關(guān)于如何在Android使用JNI調(diào)用C/C++代碼庫,網(wǎng)上已經(jīng)有很多優(yōu)秀的文章了,這里說一個大概過程吧:

首先需要懂C,其次要明白JNI的開發(fā)流程,然后還要知道NDK如何使用

1、在java代碼中聲明了一個native本地方法

Public native String helloFromc();

2、在項目目錄中創(chuàng)建JNI文件夾

3、在JNI文件夾里面創(chuàng)建C文件,按照規(guī)范寫代碼

Jstring

Java_com_cheng_jnitest_MainActivity_helloFromc(JNIEnv* env,jobject obj)

4、用ndk-build指令編譯

編譯前需要配置Android.mk文件

//指定編譯的文件夾,指定當(dāng)前的目錄

LOCAL_PATH := $(call my-dir)

//編譯器在編譯的時候會產(chǎn)生很多臨時變量,中間變量最好在編譯前清空所有的臨時變量

include $(CLEAR_VARS)

//編譯完成后的模塊名

LOCAL_MOUDLE := hello

//編譯的源文件

LOCAL_SRC_FILES:=hello.c

//編譯一個動態(tài)庫

//動態(tài)庫.so 只包含運行的函數(shù),不包含依賴,所以體積小,運行的時候回去系統(tǒng)尋找依賴

//靜態(tài)庫.a 包含所有的函數(shù)和運行的依賴,所以體積大,包含所有的api

include $(BUILD_SHARED_LIBRARY)

5、生成了一個so動態(tài)庫,放到了libs里面

6、項目中引入依賴庫

Static{

System.loadLibrary("hello");

}

-

android 怎么調(diào)用jni里面的方法

調(diào)用jni里面的方法,過程如下:

第一步:

使用Java編寫HelloWorld 的Android應(yīng)用程序:

package com.lucyfyr;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

public class HelloWorld extends Activity {

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

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Log.v("dufresne", printJNI("I am HelloWorld Activity"));

}

static

{

//加載庫文件

System.loadLibrary("HelloWorldJni");

}

//聲明原生函數(shù) 參數(shù)為String類型 返回類型為String

private native String printJNI(String inputStr);

}

這一步我們可以使用eclipse來生成一個App;

因為eclipse會自動為我們編譯此Java文件,后面要是用到。

第二步:

生成共享庫的頭文件:

進入到eclipse生成的Android Project中 :/HelloWorld/bin/classes/com/lucyfyr/ 下:

可以看到里面后很多后綴為.class的文件,就是eclipse為我們自動編譯好了的java文件,其中就有:

HelloWorld.class文件。

退回到classes一級目錄:/HelloWorld/bin/classes/

執(zhí)行如下命令:

javah com.lucyfyr.HelloWorld

生成文件:com_lucyfyr_HelloWorld.h

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

#include jni.h

/* Header for class com_lucyfyr_HelloWorld */

#ifndef _Included_com_lucyfyr_HelloWorld

#define _Included_com_lucyfyr_HelloWorld

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: com_lucyfyr_HelloWorld

* Method: printJNI

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

*/

JNIEXPORT jstring JNICALL Java_com_lucyfyr_HelloWorld_printJNI

(JNIEnv *, jobject, jstring);

#ifdef __cplusplus

}

#endif

#endif

可以看到自動生成對應(yīng)的函數(shù):Java_com_lucyfyr_HelloWorld_printJNI

Java_ + 包名(com.lucyfyr) + 類名(HelloWorld) + 接口名(printJNI):必須要按此JNI規(guī)范來操作;

java虛擬機就可以在com.simon.HelloWorld類調(diào)用printJNI接口的時候自動找到這個C實現(xiàn)的Native函數(shù)調(diào)用。

當(dāng)然函數(shù)名太長,可以在.c文件中通過函數(shù)名映射表來實現(xiàn)簡化。

第三步:

實現(xiàn)JNI原生函數(shù)源文件:

新建com_lucyfyr_HelloWorld.c文件:

當(dāng)前標(biāo)題:android調(diào)用jni,android調(diào)用jni讀取內(nèi)存
本文鏈接:http://chinadenli.net/article24/dsgchce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航建站公司定制網(wǎng)站App設(shè)計虛擬主機網(wǎng)站改版

廣告

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

成都定制網(wǎng)站網(wǎng)頁設(shè)計