android JNI utils/Log.h 找不到 解决方法

本文介绍了解决Android JNI开发中找不到Log.h文件的问题,提供了详细的步骤来启用NDK的LOG功能,包括修改Android.mk文件及.c文件中的包含路径,并展示了如何定义LOG宏进行日志输出。

         android JNI utils/Log.h 找不到 解决方法

分类: android 2018人阅读 评论(0) 收藏 举报

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

然后用NDK 编译的时候会提示error: utils/Log.h: No such file or directory

如果想要他的LOG功能的话

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

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

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

#include<android/log.h>

3-----使用方法

#define LOG_TAG "debug"
#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----打印语句

LOGI("test log!!!!")

LOGI("the string is: %s \n",buff);



5----错误输出到日志

LOGI(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
package com.taixin.txallremote.jni; import com.taixin.txallremote.utils.ALog; public final class H6RemoteIO { private static final String TAG = "H6RemoteIO"; private static final String libSoName = "txporting-i2c"; static { ALog.i(TAG, "load library: lib" + libSoName + ".so"); System.loadLibrary(libSoName); } public static void remoteOpen() { ALog.i(TAG, "txallremote init"); TxAllRemote_Init(); } public static void remoteLearnStart() { TxAllRemote_LearnStart(); } public static byte remoteReadData(byte[] buf, int count) { byte ack; ack = TxAllRemote_ReadData(buf, count); ALog.i(TAG, "ack:" + ack); return ack; } public static byte remoteWriteData(byte[] buf, int count) { byte ack; ack = TxAllRemote_WriteData(buf, count); return ack; } private static native void TxAllRemote_Init(); private static native void TxAllRemote_LearnStart(); private static native byte TxAllRemote_ReadData(byte[] paramArrayOfByte, int paramInt); private static native byte TxAllRemote_WriteData(byte[] paramArrayOfByte, int paramInt); } 07-23 08:31:32.909 22259 22282 D libEGL : loaded /system/lib64/egl/libEGL_emulation.so 07-23 08:31:32.910 22259 22259 I txallremote-H6RemoteIO: load library: libtxporting-i2c.so 07-23 08:31:32.929 22259 22259 D AndroidRuntime: Shutting down VM 07-23 08:31:32.929 22259 22282 I nemucooker: cook file1: /etc/mumu-configs/renderer.config, last modify time: Thu Aug 29 11:22:45 2024 07-23 08:31:32.929 22259 22282 I nemucooker: cook file2: /data/system/etc/mumu-configs/renderer.config, last modify time: Thu Jul 17 21:45:34 2025 07-23 08:31:32.929 22259 22282 I nemucooker: cook select file: /data/system/etc/mumu-configs/renderer.config 07-23 08:31:32.940 22259 22259 E AndroidRuntime: FATAL EXCEPTION: main 07-23 08:31:32.940 22259 22259 E AndroidRuntime: Process: com.taixin.txallremote, PID: 22259 07-23 08:31:32.940 22259 22259 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libtxporting-i2c.so" not found 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at java.lang.Runtime.loadLibrary0(Runtime.java:1086) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at java.lang.Runtime.loadLibrary0(Runtime.java:1006) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at java.lang.System.loadLibrary(System.java:1656) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at com.taixin.txallremote.jni.H6RemoteIO.<clinit>(H6RemoteIO.java:12) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at com.taixin.txallremote.jni.H6RemoteIO.remoteOpen(Unknown Source:0) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at com.taixin.txallremote.dataway.RemoteDirectIo.getInstance(RemoteDirectIo.java:27) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at com.taixin.txallremote.activity.TempHumiControlManagerActivity.onCreate(TempHumiControlManagerActivity.java:81) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:8054) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:8034) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1347) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3736) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3931) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2294) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8060) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571) 07-23 08:31:32.940 22259 22259 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1091) 07-23 08:31:32.945 22259 22282 D libEGL : loaded /system/lib64/egl/libGLESv1_CM_emulation.so 07-23 08:31:32.946 22259 22282 D libEGL : loaded /system/lib64/egl/libGLESv2_emulation.so 07-23 08:31:32.961 22259 22282 E GraphicsEnv: Failed to get gpu service 07-23 08:31:33.000 22259 22259 I Process : Sending signal. PID: 22259 SIG: 9 07-23 08:31:33.025 1251 10643 I ActivityManager: Process com.taixin.txallremote (pid 22259) has died: fg TOP 07-23 08:31:33.025 1054 1054 I Zygote : Process 22259 exited due to signal 9 (Killed) 07-23 08:31:33.025 1251 1291 I libprocessgroup: Successfully killed process cgroup uid 10111 pid 22259 in 0ms 07-23 08:31:40.589 1091 1091 D opengl-gc: Check pid 22259: running 0
07-24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值