android JNI utils/Log.h 找不到

本文介绍了解决Android JNI代码中使用AndroidLog输出时遇到的错误:找不到utils/Log.h文件的方法。通过修改Android.mk配置文件及使用自定义ALog.h头文件实现Log功能。

从网上下载的 Android Jni代码中使用到Android Log输出,


在JNI的c文件中如果用到了#include <utils/Log.h>

然后用NDK 编译, ndk-build clean && ndk-build 提示error: utils/Log.h: No such file or directory

如果只是用到LOG功能

1 修改Android.mk文件配置,添加如下语句

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

2 在.c文件中修改为如下语句

//#include <utils/Log.h>// 关闭此行

#include<ALog.h>//增加些行

3 ALog.h 文件内容如下:

#pragma once

#include<android/log.h>

#define LOG_TAG "debug log"
#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, fmt, ##args)
#define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, fmt, ##args)
#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, fmt, ##args)

4----可以使用Log输出信息,同Java层的 Log.i

LOGI("jni android log!!!!")

LOGD("the string is: %s \n", strMsg);

LOGE(strerror(errno))


给出这部分代码如何安全使用刚刚的回调:package com.isa.navi.manager; import android.os.RemoteCallbackList; import androidx.annotation.NonNull; import com.isa.navi.jni.hmi.HmiJNIImpl; import com.isa.navi.jni.hmi.update.USBListener; import com.isa.carplay.library.carplay.ILocationCallback; import com.isa.carplay.library.carplay.bean.LocationInfo; import com.isa.navi.library.map.IMapDownloadCallbackAIDL; import com.isa.navi.library.map.UpdateInfoBean; import com.isa.navi.utils.BinderUtils; import com.isa.navi.utils.LogUtils; import java.util.Iterator; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import df.car.hardware.CarPropertyValue; public class CallBackManager { private final String TAG = "CallBackManager"; private RemoteCallbackList<IMapDownloadCallbackAIDL> mIHardwareRemoteCallbackList = new RemoteCallbackList<>(); private RemoteCallbackList<ILocationCallback> mILocationCallbackList = new RemoteCallbackList<>(); private List<CarManager.IInitFinishListener> mCarServiceIInitFinishListener = new CopyOnWriteArrayList<>(); private List<CarManager.IEventChangeListener> mCarEventChangeListener = new CopyOnWriteArrayList<>(); private List<LocationMgr.IGnssEventChangeListener> mGnssEventChangeListener = new CopyOnWriteArrayList<>(); private List<LocationMgr.ISatelliteEventChangeListener> mSatelliteEventChangeListener = new CopyOnWriteArrayList<>(); private List<USBListener> usbEventChangeListener = new CopyOnWriteArrayList<>(); // private CallBackManager() { // LogUtils.i(TAG, "CallBackManager construction is called."); // } // // CallBackManager.java 新增回调初始化 // //zwx // 修改后的构造函数 private CallBackManager() { LogUtils.i(TAG, "CallBackManager construction is called."); // 初始化回调绑定 initDataCheckCallback(); // 新增回调绑定 } private void initDataCheckCallback() { HmiJNIImpl.getInstance().setDataCheckCallback( new HmiJNIImpl.DataCheckCallback() { @Override public void onCheckReady() { // 确保主线程执行 if (Looper.myLooper() == Looper.getMainLooper()) { HmiJNIImpl.getInstance().dataVersionCheck(); } else { new Handler(Looper.getMainLooper()).post( HmiJNIImpl.getInstance()::dataVersionCheck ); } } } ); } private static class CallBackManagerHolder { private static CallBackManager sCallBackManager = new CallBackManager(); } public static CallBackManager getInstance() { return CallBackManagerHolder.sCallBackManager; } // public void registerUpdateStatusListener(IMapDownloadCallbackAIDL callback) { // if (!BinderUtils.LOG_CB_BINDER_INFO("registerUpdateStatusListener", callback, BinderUtils.ACTION_REGISTER)) { // return; // } // mIHardwareRemoteCallbackList.register(callback); // if ( HmiJNIImpl.getInstance().dataVersionCheckAvaliable) { // HmiJNIImpl.getInstance().dataVersionCheck();//调用时间点-zwx // } // } // 修改后的注册方法zwx public void registerUpdateStatusListener(IMapDownloadCallbackAIDL callback) { if (!BinderUtils.LOG_CB_BINDER_INFO("registerUpdateStatusListener", callback, BinderUtils.ACTION_REGISTER)) { return; } mIHardwareRemoteCallbackList.register(callback); } 给出修正后的完整代码
最新发布
08-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值