android jni问题排查手段 日志、文件写入

一、安卓JNI写文件

1.1 文件路径

/data/data/app.name.demo/自建目录
备注:

  1. 之前没有自建目录,APP运行奔溃,后自建一个后解决
  2. app.name.demo为应用名字

1.2 代码

    char   filename[256];
    FILE  * file = NULL;
    int     ret = 0;
    
	memset(filename,0,sizeof(filename));
	memcpy(filename,"/data/data/app.name.demo/nalu/test.ts",strlen("/data/data/app.name.demo/nalu/test.ts"));

    file = fopen(filename,"a");
	
	if(file) {
		ret = fwrite((char *)vdata,datalen,1,muxts->file);
		printf("ret=%d\n",ret);
	}
	
	fclose(file);

1.3 获取文件

使用android studio ide 获取文件流程

  1. View --> Tool Windows --> Device File Explorer
  2. 进入 /data/data目录
  3. 找到自己APP的名字进入
  4. 然后右键NEW --> Directory 创建一个目录
  5. 将上个代码路劲与创建的文件路径统一
  6. 运行程序,生成文件
  7. 右键synchronize刷新目录
  8. 在新生成的文件上右键,选择 save as
  9. 将文件保存在电脑路径

二、其他

### 使用 Android Logcat 在 Unity 中进行日志记录 为了在 Unity 中利用 Android 的 `logcat` 进行有效的日志记录和调试工作,开发者可以采用多种方式集成这两种工具。一种常见的做法是在 C# 脚本中调用 Java 类的方法来发送消息到系统的日志缓冲区。 对于希望过滤特定标签的日志条目以便更高效地定位来自应用程序的信息而言,命令如下所示[^1]: ```bash adb logcat -s UnityActivityManager PackageManager dalvikvm DEBUG ``` 当涉及到具体实现时,在 Unity 项目里可以通过编写自定义插件的方式访问底层 API 。这通常意味着创建一个 JNI (Java Native Interface) 接口连接托管代码与原生库函数。下面是一个简单的例子说明如何向 Android 设备写入一条带有指定优先级的日志信息[^2]: ```csharp using UnityEngine; public class Logger : MonoBehaviour { private const string TAG = "Unity"; [DllImport("__Internal")] private static extern void Log(string tag, int level, string message); public void DebugLog(string msg){ if(Application.platform == RuntimePlatform.Android){ Log(TAG,(int)LogLevel.Debug,msg); } } } // 安卓端对应的JNI方法 JNIEXPORT void JNICALL Java_com_example_unityplugin_NativeLib_log(JNIEnv* env,jobject thiz,jstring tag_,jint level,jstring msg_) { const char* tag = env->GetStringUTFChars(tag_, NULL); __android_log_print(level,tag,"%s",env->GetStringUTFChars(msg_,NULL)); } ``` 上述代码片段展示了怎样从 C# 向本地层传递参数并最终打印至终端设备上的控制台窗口。需要注意的是,这里使用到了枚举类型的 LogLevel 来映射不同的严重程度等级,从而确保能够正确设置每条记录的重要性级别。 #### 日志级别解释: - **VERBOSE**: 最详细的日志输出;用于开发阶段捕捉尽可能多的数据流细节。 - **DEBUG**: 表示诊断级别的信息量适中的日志;适合日常排查问题期间启用。 - **INFO**: 提供正常运行状态下的有用提示或者事件通知。 - **WARN**: 预警性质的消息提醒潜在风险但不至于造成崩溃的情况发生。 - **ERROR**: 错误条件触发后的报告;表明出现了异常状况需要立即处理。 - **FATAL**: 致命错误导致程序无法继续执行下去前发出的最后一声叹息。 通过合理运用这些不同层次的日志分类可以帮助更好地管理和理解应用行为模式变化趋势以及快速锁定故障源头位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值