Android jni 靜態註冊 和動態註冊
JNI 開發流程
1.編寫native 方法2.javah 命令,生成.h 檔案
java_類的全名_方法名
或者自己手寫
3.複製.h 標頭檔案到cpp 工程
4.複製jni.h 和jni_md.h
5.實現.h 標頭檔案中的宣告函式
6.生成一個dll 動態庫
7.在java中載入動態庫
8.觸發native函式
靜態註冊: (1)編寫native方法
public class FileUtils {
public native static void diff(String path, String pattern_Path, int file_num);
public native static String getString();
public native String getNoStaticString();
public String key= "key";
public native String accessField();
/**
* 通過 這個方法來觸發,jni 呼叫
* getRandeomUUId 這個靜態方法
*/
public native void getStaticString();
//訪問構造方法
public native Date acceessConstructor();
//訪問構造方法
public native String getStudentName();
// 中文的處理
public native String chineseChars(String str);
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
}
/* Header for class com_zack_banner_FileUtils */
#ifndef _Included_com_zack_banner_FileUtils
#define _Included_com_zack_banner_FileUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_zack_banner_FileUtils
* Method: diff
* Signature: (Ljava/lang/String;Ljava/lang/String;I)V
*/
JNIEXPORT void JNICALL Java_com_zack_banner_FileUtils_diff
(JNIEnv *, jclass, jstring, jstring, jint);
#ifdef __cplusplus
}
#endif
#endif
(JNIEnv *, jclass, jstring, jstring, jint)
{ } (4)動態註冊
/*,
{
"getString","()Ljava/langString;",(void*)native_java_str
}*/
static const JNINativeMethod getMethod[]= {
{
"diff", "(Ljava/lang/String;Ljava/lang/String;I)V", (void *) native_zack_diff
}
,{
"getString","()Ljava/lang/String;",(void*)native_java_str
}
,{
"getNoStaticString","()Ljava/lang/String;",(void*)native_no_static
},
{
"accessField","()Ljava/lang/String;",(void*)change_zack_key
},
{
"chineseChars","(Ljava/lang/String;)Ljava/lang/String;",(void*)getchineseChars
},
{
"acceessConstructor","()Ljava/util/Date;",(void*)zack_getDate
},
{
"getStudentName","()Ljava/lang/String;",(void*)zack_getStudentName
}
};
static int registerNatives(JNIEnv* engv)
{
LOGI("registerNatives begin");
jclass clazz;
clazz = (*engv) -> FindClass(engv, "com/zack/banner/FileUtils");
if (clazz == NULL) {
LOGI("clazz is null");
return JNI_FALSE;
}
if ((*engv) ->RegisterNatives(engv, clazz, getMethod, NELEM(getMethod)) < 0) {
LOGI("RegisterNatives error");
return JNI_FALSE;
}
return JNI_TRUE;
}
//JNI_OnLoad
JNIEXPORT jint JNI_OnLoad(JavaVM *vm,void* reserved){
LOGI("jni_OnLoad begin");
JNIEnv* env = NULL;
if ((*vm)->GetEnv(vm,(void**) &env, JNI_VERSION_1_4) != JNI_OK) {
LOGI("ERROR: GetEnv failed\n");
return -1;
}
assert(env != NULL);
registerNatives(env);
return JNI_VERSION_1_4;
}
private String TAG="zack";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
diff();
TextView tvTest= (TextView) findViewById(R.id.tv_test);
FileUtils fileUtils=new FileUtils();
StringBuffer stb=new StringBuffer();
stb.append(FileUtils.getString()).append("\n");
stb.append(fileUtils.getNoStaticString()).append("\n");
stb.append("change before key: " + fileUtils.key).append("\n");
fileUtils.accessField();
stb.append("after change, Key: " + fileUtils.key).append("\n");
stb.append(fileUtils.acceessConstructor()).append("\n");
stb.append(fileUtils.getStudentName());
tvTest.setText(stb);
System.out.println(fileUtils.chineseChars("她的背影"));
// fileUtils.accessField();
// System.out.println("after change, Key: " + fileUtils.key);
}
public void diff() {
Log.d(TAG, "diff begin");
FileUtils.diff("x","s",3);
}
}
下載連結 (eclipse android stuido 都有) http://download.csdn.net/download/xue9052zhou/9932116
相關推薦
Android jni 靜態註冊 和動態註冊
JNI 開發流程 1.編寫native 方法 2.javah 命令,生成.h 檔案 java_類的全名_方法名 或者自己手寫 3.複製.h 標頭檔案到cpp 工程 4.複製jni.h
BroadcastReceiver(廣播)的靜態註冊和動態註冊 --Android開發
encoding save private tac app tco sta content con BroadcastReceiver是安卓四大組件之一,本例通過代碼的方式演示靜態註冊和動態註冊。 1、靜態註冊 靜態註冊只需要AndroidManifest.xml中進行
Jni學習1--靜態註冊和動態註冊
1.jni 靜態註冊第一步:新建java類: System.loadLibrary後面會講到第二步:通過javah 命令生成.h檔案 (固定命令) (包名)C:\My
Android靜態註冊和動態註冊廣播的區別
1)靜態註冊:在AndroidManifest.xml註冊,android不能自動銷燬廣播接收器,也就是說當應用程式關閉後,還是會接收廣播。 2)動態註冊:在程式碼中通過registerReceive
Oracle listener 靜態註冊和動態註冊
一、什麼是註冊?c?6zRc0註冊就是將資料庫作為一個服務註冊到監聽程式。客戶端不需要知道資料庫名和例項名,只需要知道該資料庫對外提供的服務名就可以申請連線到資料庫。這個服務名可能與例項名一樣,也有可能不一樣。ITPUB個人空間*iG1Oe+x在資料庫伺服器啟動過程中,資
Oracle listener靜態註冊和動態註冊(zt)
曾經遇到一個問題,oracle10g裡通過netca命令得到的listener.ora預設就是動態監聽,但是預設沒有設定instance_name和service_names引數。我一般是先啟動db,然後啟動監聽,當時怎麼啟動監聽,通過lsnrctl status都看不到資料
Spring註解驅動開發——設定Bean屬性和動態註冊Bean
1、@Scope設定元件作用域 @Configuration public class MainConfigA { @Bean("person") @Scope("singleton") public Person person(){
Android Shape Drawable 靜態使用和動態使用(圓角,漸變實現)
Android Shape使用場景: 1. 圓角實現 2. 實現有邊框,有填充的背景 3. 實現一個漸變的顏色 一般情況上面三種情況我們會選擇android的shape,下面分別介紹shape的靜態使用和動態使用 1. shape的靜態使用 在drawable中建立一個xml
(七)JNI 原始碼分析、動態註冊
一、native 作用 JNITest : public class JNITest { static { System.loadLibrary("native-lib"); } public static
android 靜態庫和動態庫編譯
android 庫的編譯依賴於nkd-build,使用之前請先安裝NDK。 編譯依賴 Android.mk 和 Application.mk 兩個檔案。 Android.mk(同時編譯靜態庫和動態庫): LOCAL_PATH := $(call my-di
android 靜態廣播和動態廣播的區別和用法
一、什麼是廣播 BroadcastReceiver是android 系統的四大元件之一,本質上就是一個全域性的監聽器,用於監聽系統全域性的廣播訊息,可以方便的實現系統中不同元件之間的通訊。 程式可以通過呼叫context的sendBroadcast()方法來啟動指定的Br
(轉載)Android GradientDrawable(shape標籤定義) 靜態使用和動態使用(圓角,漸變實現)
最近被吐槽介面太醜,還是很尷尬的,全公司就一個UI設計師,所以很多事情還是不忍直視,一個同事問我,背景可不可以使用漸變的感覺,然後我就有種突然感覺眼前一亮的感覺。還真的沒有做過這方面的東西,單純使用漸變說真的,並不是很讓人感興趣,所以就思考著能不能在自定義視圖裡面直接定義一個
Android開發入門之實現動態註冊廣播監聽網路變化
最近在學習Android開發中廣播的相關內容。 註冊廣播的方式有兩種,在程式碼中註冊和在AndroidManifest.xml中註冊,其中前者也被稱為動態註冊,後者被稱為靜態註冊。以註冊廣播監聽網路變化為例,附上實現動態註冊的步驟: 1、 class Netwo
ffmpeg的ubuntu的編譯過程(編譯靜態庫和動態庫)
ffmpeg第一步源碼下載通過git下載git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg或者直接下載wget http://ffmpeg.org/releases/ffmpeg-3.3.tar.bz2如果是下載的ffmpeg-3.3.tar.bz2 需要進
關於Linux靜態庫和動態庫的分析
所在 mis color 先後 main 技術 哪些 共享 協議 關於Linux靜態庫和動態庫的分析 關於Linux靜態庫和動態庫的分析 1.什麽是庫 在windows平臺和linux平臺下都大量存在著庫。 本質上來說庫是一種可運行代碼的二進制形式。能夠被操作系
靜態庫和動態庫的使用
window != 函數調用 img clas 處理 dllexport void 再看 1.靜態庫使用比較簡單,就兩步 @1包含靜態庫頭文件#include "文件名" @2預處理加載靜態庫 #pragma comment(lib,"庫文件名") 2.再看動態庫 @1首先
第6章 靜態路由和動態路由(1)_靜態路由
align 將在 跟蹤 添加 測試 字母 ppp協議 必須 缺少 1. 路由——網絡層實現的功能 1.1 路由功能 (1)網絡層的功能:給傳輸層協議提供簡單靈活的、無連接的、盡最大努力交付的數據包服務。 (2)路由器為每一個數據包單獨地選擇轉發路徑,網絡層並不提供服務質量的
轉載 -jsp靜態包含和動態包含的區別
hit 出現 ron blog col ace 報錯 否則 區別 原博地址:http://blog.csdn.net/baidu_21578557/article/details/51226678 主要從以下5方面進行分析: 1.語法: 靜態包含:<%@
oracle靜態sql和動態sql
收入 性能 varchar 建立 系統 根據 ora imm arch 1.靜態SQL與動態SQLOracle編譯PL/SQL程序塊分為兩個種: 其一為前期聯編(early binding),即SQL語句在程序編譯期間就已經確定,大多數的編譯情況屬於這種類型; 另外一種
spring靜態代理和動態代理
row main 同時 rac images 處理 解決 pro abstract 本節要點: Java靜態代理 Jdk動態代理 1 面向對象設計思想遇到的問題 在傳統OOP編程裏以對象為核心,並通過對象之間的協作來形成一個完整的軟件功能,由於對象可以繼承,因此我們可以