国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
列舉一些Android的JNI開發(fā)技術
1.自動生成JNI C函數(shù)定義:
   Java:  
   packagecom.testsurface;
   public classMainActivity extends Activity
   {
       private native intjni_init(); 
private native void jni_setBitmap(Bitmapbitmap);
   }
   設置好 java環(huán)境變量后執(zhí)行:
   javah -v -classpathXXXX\android-sdk\platforms\android-10\android.jar;bin\classes -djni com.test.MainActivity
  這樣就會在目錄jni下生成com_test_MainActivity.h文件
JNIEXPORT jint JNICALLJava_com_testsurface_MainActivity_jni_1init
  (JNIEnv *, jobject);

2.查看javaclass函數(shù)和變量簽名:
     javap -scom.testsurface.MainActivity

3.android log打印:
#define LOG_TAG       "TestJni"
#define LOGV(...)__android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG,__VA_ARGS__)
#define  LOGW(...)__android_log_print(ANDROID_LOG_WARN,   LOG_TAG, __VA_ARGS__)
#define  LOGI(...)__android_log_print(ANDROID_LOG_INFO,   LOG_TAG, __VA_ARGS__)
#define  LOGD(...)__android_log_print(ANDROID_LOG_DEBUG,   LOG_TAG,__VA_ARGS__)
#define  LOGE(...)__android_log_print(ANDROID_LOG_ERROR,   LOG_TAG,__VA_ARGS__)

4.引用及獲得方法ID:
static jint jni_init(JNIEnv *env, jobjectthiz)
{
LOGV("jni_init.");

g_thiz =(jobject)env->NewGlobalRef(thiz);
jclass clazz =env->GetObjectClass(g_thiz);
g_testid = env->GetMethodID(clazz, "test","()V");
         // id =env->GetMethodID(clazz,"<init>", "()V");//類構造函數(shù)ID
return 0;
}
釋放:
env->DeleteGlobalRef(g_thiz);

5.調用Java函數(shù):
if((g_thiz != NULL)&& (g_testid !=NULL))
{
env->CallVoidMethod(g_thizg_testid);
}

6.同步鎖:
Java:
synchronized (obj)
  
 // A
 
synchronized(obj)
{
 // B
}
C/C++
env->MonitorEnter(obj); 
// A
env->MonitorExit(obj);

7.JNI加載
Java:
public class MainActivity extendsActivity
{
   static
   {
       System.loadLibrary("test");// 加載:libtest.so
   }
   private native int  jni_init(); //定義的native方法
}

JNI:

#define kClassPathName "com/test/MainActivity"

static jint jni_init(JNIEnv *env,jobject thiz)
{
LOGV("jni_init.");
return 0;
}

static JNINativeMethod gMethods[]=
{
   {"jni_init",      "()I",     (void *)jni_init},
};

static int register_Methods(JNIEnv*env)
{
   jclass clazz = NULL;
   clazz = env->FindClass(kClassPathName);
    if(clazz == NULL)
   {
       LOGE("Native registrationunable to find class '%s'\n", kClassPathName);
       return -1;
   }
    if(env->RegisterNatives(clazz, gMethods,sizeof(gMethods)/sizeof(gMethods[0])) <0)
   {
       LOGE("RegisterNatives failedfor '%s'\n", kClassPathName);
       return -1;
   }

   return 0;
}

jint JNI_OnLoad(JavaVM* vm, void*reserved)
{
LOGV("JNI_OnLoad.");

JNIEnv *env = NULL;
jint result = -1;
if(vm->GetEnv((void**)&env, JNI_VERSION_1_4) != JNI_OK)
{
LOGE("ERROR: GetEnvfailed\n");
goto bail;
}

if(register_Methods(env)< 0)
{
LOGE("ERROR: native methods registrationfailed\n");
goto bail;
}
result = JNI_VERSION_1_4;

bail:
return result;
}

void JNI_OnUnload(JavaVM* vm, void*reserved)
{
LOGV("JNI_OnUnLoad.");
}

8.Android.mk最簡單的示例:
LOCAL_PATH:= $(callmy-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := test

LOCAL_C_INCLUDES:= 

LOCAL_SRC_FILES:= \
test.cpp

# 鏈接
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android JNI 通過JNI_Onload注冊方法的過程
[深入理解Android卷一 全文
android 動態(tài)注冊JNI函數(shù)過程源碼分析
Android HAL 開發(fā) (2)
Android筆記之使用CMake進行JNI開發(fā)(Android Studio)
AndroidJNI基礎篇(一)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服