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/
📢这位道友请留步 ☁️,我观你气度不凡 ,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞 👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

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

相关推荐
QuantumLeap丶13 分钟前
《Flutter全栈开发实战指南:从零到高级》- 25 -性能优化
android·flutter·ios
亭台22 分钟前
【Matlab笔记_23】MATLAB的工具包m_map的m_image和m_pcolor区别
笔记·算法·matlab
Jack___Xue39 分钟前
LangChain实战快速入门笔记(五)--LangChain使用之Tools
笔记·microsoft·langchain
测试19981 小时前
一个只能通过压测发现Bug
自动化测试·软件测试·python·selenium·测试工具·bug·压力测试
木易 士心2 小时前
MVC、MVP 与 MVVM:Android 架构演进之路
android·架构·mvc
百锦再2 小时前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构
走在路上的菜鸟2 小时前
Android学Dart学习笔记第十三节 注解
android·笔记·学习·flutter
介一安全2 小时前
【Frida Android】实战篇15:Frida检测与绕过——基于/proc/self/maps的攻防实战
android·网络安全·逆向·安全性测试·frida
hhy_smile2 小时前
Android 与 java 设计笔记
android·java·笔记
laocooon5238578863 小时前
C#二次开发中简单块的定义与应用
android·数据库·c#