NDK編程中如何在C檔案中列印調試資訊

來源:互聯網
上載者:User

標籤:

1,在Android.mk檔案中加上

LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE  :=ndkdemo
LOCAL_SRC_FILES :=com_app_test_nativeMethod.c
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
include $(BUILD_SHARED_LIBRARY)

 

2,在要實現的.c檔案中引入標頭檔

#include <string.h>
#include <jni.h>
#include <android/log.h>
#include <stdio.h>

 

3,在需要輸出調試資訊的地方

 __android_log_write(ANDROID_LOG_DEBUG,"tt","come in jin!!");

注意前面是兩個底線

4,下面直接上代碼

#include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>


 #include <jni.h>
 #include <android/log.h>

//在logCat中加上  日誌輸出標記  native-activity
 #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))
 #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__))




 /**********傳輸整數*************


 */
 JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIInt( JNIEnv* env, jobject obj , jint i)
 {
     //找到java中的類
     jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity");
     //再找類中的方法
     jmethodID mid = (*env)->GetMethodID(env, cls, "callbackInt", "(I)V");
     if (mid == NULL)
     {
         LOGI("int error");
         return;
     }


     //回調java中的方法
     int k=0;
     for(k;k<10;k++){
    (*env)->CallVoidMethod(env, obj, mid ,k);
     }
 }


 /********傳輸字串*************
 */
 JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIString( JNIEnv* env, jobject obj , jstring s)
 {
     //找到java中的類
     jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity");
     //再找類中的方法
     jmethodID mid = (*env)->GetMethodID(env, cls, "callbackString", "(Ljava/lang/String;)V");
     if (mid == NULL)
     {
         LOGI("string error");
         return;
     }
     const char *ch;
     //擷取由java傳過來的字串
     ch = (*env)->GetStringUTFChars(env, s, NULL);
     //列印
     LOGI("from java string: %s",ch);
     (*env)->ReleaseStringUTFChars(env, s, ch);
     //回調java中的方法
     (*env)->CallVoidMethod(env, obj, mid ,(*env)->NewStringUTF(env,"你好haha"));


 }


 /********傳輸數組(byte[])*************
 */
 JNIEXPORT void JNICALL Java_com_nan_callback_MyCallbackActivity_callJNIByte( JNIEnv* env, jobject obj , jbyteArray b)
 {
     //找到java中的類
     jclass cls = (*env)->FindClass(env, "com/nan/callback/MyCallbackActivity");
     //再找類中的方法
     jmethodID mid = (*env)->GetMethodID(env, cls, "callbackByte", "([B)V");
     if (mid == NULL)
     {
         LOGI("byte[] error");
         return;
     }


     //擷取數組長度
     jsize length = (*env)->GetArrayLength(env,b);
     LOGI("length: %d",length);
     //擷取接收到的資料
     int i;
     jbyte* p = (*env)->GetByteArrayElements(env,b,NULL);
     //列印
     for(i=0;i<length;i++)
     {
         LOGI("%d",p[i]);
     }


     char c[5];
     c[0] = 1;c[1] = 2;c[2] = 3;c[3] = 4;c[4] = 5;
     //構造數組
     jbyteArray carr = (*env)->NewByteArray(env,length);
     (*env)->SetByteArrayRegion(env,carr,0,length,c);
     //回調java中的方法
     (*env)->CallVoidMethod(env, obj, mid ,carr);
 }

NDK編程中如何在C檔案中列印調試資訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.