Android问题笔记四十一:JNI NewStringUTF错误的几种解决方案

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,交流让学习不再孤单

👉实践过程

😜问题

这两天和同事联合开发应用,同事用C++开发 SO,而同事的代码来源于另一个远程同事的 C# 代码,中间跨度比较大,而且开发工具还不同。造成了以下问题:

java 复制代码
NewStringUTF input is not valid Modified UTF-8
java 复制代码
Abort message: 'JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0
string: '�'
input: '0xf4'
in call to NewStringUTF
from ......

一看就知道哪的编码出问题了。

😜解决

  1. 一定要特别注意 这个细节,平时开发 SO 的同事是从 Android Studio 中进行创建 C++ 文件的,在里面创建默认是 UTF-8 的编码格式,而一旦有更多人合作项目的话,其他人使用 VS 开发,或者其他开发工具写完代码,再给你代码文件,如果你不留意直接拷贝文件进去,然后编译,虽然编译通过,但是运行会出现如上的崩溃。这就是文件编码格式造成的问题,一定要和同事沟通好用 UTF-8 编码,或者你拿到代码文件后在 Studio 中自己弄一遍都可以。
  2. 出现字符编码的崩溃你可能在有的设备上运行没事,有的运行崩溃,这是因为不同平板在字符编码的支持上有所不同导致的。我遇见的问题就是国内的产品硬件不崩溃,国外的产品硬件崩溃。
  3. 特别注意在 Android 中的 String 类型,传递到 NDK 他们是 jstring 类型接收,这时候他们不能直接用,需要利用 GetStringUTFChars 转一下才可以。而 NDK 给 Java 需要 NewStringUTF 转一下才能回调出来。在这个过程中如果 NDK 需要用到里面的字符串做业务则需要转换(我好想说了废话,不用的话还传啥呢,哈哈)。
  4. 使用 Base64 进行数据传递,双方虽然多了一层编码解码的问题,但是能避免编码的坑。我们在给 HTML 传递数据的时候也是这样解决的(尤其是里面是 Json ,Json 里套Json字符串)。

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步 ☁️,我观你气度不凡 ,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞 👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。

相关推荐
暗光之痕11 小时前
Unreal5研究笔记 Actor的生命周期函数
笔记·unreal engine
Gain_chance11 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
Fushize11 小时前
多模块架构下的依赖治理:如何避免 Gradle 依赖地狱
android·架构·kotlin
宵时待雨12 小时前
STM32笔记归纳9:定时器
笔记·stm32·单片机·嵌入式硬件
Jomurphys12 小时前
Kotlin - 类型别名 typealias
android·kotlin
Haha_bj12 小时前
Flutter ——flutter_screenutil 屏幕适配
android·ios
m0_7190841112 小时前
React笔记张天禹
前端·笔记·react.js
Haha_bj12 小时前
Flutter ——device_info_plus详解
android·flutter·ios
前端小伙计12 小时前
Android/Flutter 项目统一构建配置最佳实践
android·flutter
玄同76513 小时前
Git常用命令指南
大数据·git·elasticsearch·gitee·github·团队开发·远程工作