JNI:用C代码读取文本文件并返回到sdk

2023-12-12

我正在尝试创建一个 Android 应用程序来使用 NDK 从文本文件中读取文本。我的 C 代码将一个字符串读入变量并将字符串变量返回到 java 代码。但是当我运行 Android 应用程序时,TextView 中显示的字符串显示为@ 等符号后跟一些矩形。从 JNI 返回字符串的格式是什么?检查下面的代码。我可以在没有任何其他权限的情况下读取系统文件吗?printf() 语句会做什么?

Java代码:

package com.example.openfile;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
public native String ndkopenfile();
static{
    System.loadLibrary("mylib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //TextView textView1 = new TextView(this);
    //textView1.setText(ndkopenfile());
    Button button1 = (Button)findViewById(R.id.button1);
    button1.setOnClickListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    String str1;
    Log.d("Click","The button has been clicked to open the file");

    str1=ndkopenfile();

    //setTitle(str1);
    TextView tv = (TextView)findViewById(R.id.textView1);
    tv.setText(str1);
}

}

C code:

JNIEXPORT jstring JNICALL Java_com_example_openfile_MainActivity_ndkopenfile
(JNIEnv *env, jobject this)
{

    jstring str1[20];
    FILE* fp = fopen("/sdcard/x.txt","w+");
    if(fp!=NULL)
    {
        fgets(str1,20,fp);
        fflush(fp);
        fclose(fp);
        return(*env)->NewStringUTF(env,str1);
    }
    else
    {
        fclose(fp);
        return(*env)->NewStringUTF(env,"Error opening file!");
    }
 }

尝试这个:

JNIEXPORT jstring JNICALL Java_com_example_openfile_MainActivity_ndkopenfile
(JNIEnv *env, jobject this)
{
        char myStr[20];
        FILE* fp = fopen("/sdcard/x.txt","w+");
        if(fp!=NULL)
        {
            fgets(myStr,20,fp);
            fflush(fp);
            fclose(fp);
            return(*env)->NewStringUTF(env,myStr);
        }
        else
        {
            fclose(fp);
            return(*env)->NewStringUTF(env,"Error opening file!");
        }
}

这项技术非常有效!已测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JNI:用C代码读取文本文件并返回到sdk 的相关文章

  • 通话过程中是否可以拦截语音数据?

    我计划开发 Android 应用程序 对语音数据进行加密 解密 以便各方可以使用安全通道进行通信 那么问题来了 GSM通话时如何拦截语音 音频数据 可能还是不可能 我应该使用 Android NDK 还是其他东西 在 GSM 中 由于信道特
  • build.gradle 文件中的 abiFilters 属性是什么?

    我找到了关于什么的文档ABI https developer android com ndk guides abis html是 但我找不到任何有关 ndk abiFilters 属性的确切用途的文档 具体有几个问题 如果我设置该属性 列出
  • 在哪里可以找到旧版本的 Android NDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道在哪里可以找到旧版本的 Android NDK 我们的代码不是用 r6 构建的 肯定有某个地方
  • 使用 Android NDK 使用 -fsigned-char 进行构建安全吗?

    为了与其他平台保持一致 我需要使用signed char在我正在处理的一些本机代码中 但默认情况下在Android NDK上char类型是unsigned 我尝试明确使用signed char类型 但它生成太多警告differ in sig
  • Boost C++ 和 Android 3

    我尝试用谷歌和SO搜索 到目前为止 我只能找到相互矛盾的信息 如果 Boost 和 Android 结合太难 也许有替代品 我对 smart ptr 线程 函数 lexical cast string algo 和容器特别感兴趣 任何意见都
  • Android NDK __android_log_print函数和LogCat

    我有一个类似的功能 android log print ANDROID LOG INFO HelloNDK 在我的 C 代码上 我在 LogCat 上找不到该输出 我需要设置什么样的过滤器 按日志标签 按日志消息 按应用程序名称 按日志级别
  • Scala SBT 和 JNI 库

    我正在编写一个简单的应用程序Scala通过以下方式使用 leveldb 数据库leveldbjni图书馆 我的build sbt文件看起来像这样 name Whatever version 1 0 scalaVersion 2 10 2 l
  • 如何在Android项目中使用libffmpeg.so?

    我正在尝试在 Android 中创建一个屏幕录制应用程序 为此 我使用 FFmpeg 我已经创建了 libffmpeg so 文件 现在我想在 Android 项目中使用相同的方法来调用它的本机函数 我怎样才能做到这一点 本教程提供了有关此
  • 使用 Android NDK 将文件写入 SD 卡以外的位置?

    除了SD卡之外 还有其他方法可以将文件写入其他位置吗 我在文件系统上尝试了许多不同的路径 但 fopen 总是返回 NULL 除了我在 sdcard 内写入 读取的任何文件 还有其他相当于
  • 如何在 Windows 7 中与 Cygwin 建立符号链接

    最近我测试了用 C C 原生代码编写 Android 应用程序 问题在于使用 Android NDK 时创建符号链接 经过一番谷歌搜索后 有人说使用 Cygwin 我现在已经安装了 如何在 Windows 7 中与 Cygwin 建立符号链
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 使用 NDK 构建具有适用于 Android 的 cmake 构建文件的 C++ 项目

    我必须构建 2 个独立的 C 项目 它们具有针对不同平台的 Cmake 构建文件设置 我想使用 NDK 为 Android 构建它们 以便我可以将它们用作 Android Studio 中的预构建库 如何使用 NDK 为 Android 构
  • android ndk 硬件调试内存

    背景 我对 C 很有经验 对 Android 和 Java 还很陌生 但这是编程的环境问题 我已经用 ANSI C 开发了一个管理应用程序 可以移植到任何操作系统 只需在依赖于操作系统的代码中添加 UI 即可 它使用相当多的内存 特别是对于
  • 吉夫伦致命信号11

    我正在尝试使用一些本机代码来创建 Gif 我使用绘画绘制图像 创建一些笔画 单击 保存 绘制的图像将保存为 JPG 格式 当我单击 创建 Gif 时 它会获取所有图像并开始创建 gif 这是当我收到致命信号 11 并且应用程序重新启动时 我
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • Android 7 GraphicBuffer 替代方案,用于直接访问 OpenGL 纹理内存

    从移动设备具有 CPU 和 GPU 共享内存这一事实中获利的唯一方法是使用GrphicBuffer 但由于 Android 7 限制对私有本机库 包括 gralloc 的访问 因此无法再使用它 问题 是否有其他方法可以直接内存访问纹理的像素
  • Android JNI APK打包

    我已经实现了一个 JNI android 应用程序 此应用程序需要将一些额外的 共享库 打包为 APK 的一部分 使用 Ecplise 我已将这些库添加到项目的 libs armeabi 文件夹中 但是 当启动应用程序 通过集成调试器 时
  • Android 上的多处理

    我一直在 Android 上执行一些测试 以验证并行化算法 如 FFT 的性能可以提高多少 我通过使用带有 JNI FFTW 的 pthread 和 Java 线程 来自 JTransforms 来实现这些算法 我没有像预期那样通过使用线程
  • java.lang.UnsatisfiedLinkError - android studio gradle 中的 NDK?

    文件夹结构 app main java jni Android mk Application mk hello jni c res 在构建 gradle apply plugin com android application androi
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了

随机推荐

  • Spark读取非UTF-8编码的整个文本文件

    我想通过以下方式读取非 UTF 8 编码的整个文本文件 val df spark sparkContext wholeTextFiles path 12 toDF 化为火花 如何更改编码 我想读取 ISO 8859 编码的文本 但它不是 C
  • IE 中 window.opener 的 JavaScript 问题

    我正在尝试使用以下 JavaScript 来检查弹出页面是否仍然打开 父页面 调用页面以打开弹出窗口 已打开 但此代码仍然失败 我从一个 aspx 弹出页面调用它 该页面在另一个母版页中有一个母版页 因此 最终调用此脚本的单击事件是内容占位
  • C# 中的 ref 和 out 参数不能标记为变体

    该声明的含义是什么 从这里 C 中的 ref 和 out 参数以及 不能被标记为变体 1 是否意味着不能进行以下操作 public class SomeClass
  • 删除异常值无法运行 cor.test()

    我正在从数据集的单列中提取异常值 然后我尝试运行cor test 在该列加上另一列 我收到错误 Error in cor test default dep delay noout distance x and y must have the
  • 如何更快地从 Firebase Firestore 获取数据?

    我是编程和 iOS 开发方面的新手 我正在尝试使用 Firebase 中的 Firestore 数据库制作一个应用程序 我不知道这是否正常 但是当我尝试从 firestore 数据库获取数据时 它对我来说似乎太长了 我不知道我是否犯了错误
  • 如何为 TGraphicControl 的后代组件添加鼠标滚轮支持?

    我创建了一个源自 TGraphicControl 的 delphi 组件 是否可以添加对鼠标滚轮的支持 编辑 我已经公开了 MouseWheel 事件 如下所示 但它们没有被调用 TMyComponent class TGraphicCon
  • GitHub 克隆错误:无法克隆并出现 EOF 错误

    我正在尝试使用 Ubuntu 13 04 从 GitHub 私人存储库克隆我的项目 我总是收到如下错误 error RPC failed result 18 HTTP code 200 17 KiB s fatal The remote e
  • 从 Excel 创建 Outlook 应用程序会生成类型不匹配错误

    我正在尝试使用 Outlook 模板创建 Outlook 电子邮件 On the Set obApp Outlook Application行 我收到错误 错误 13 类型不匹配 我似乎使用了本网站上有关该主题的其他帖子中使用的相同语法 我
  • 数据库继承的技术?

    当您需要将继承的类持久化到不支持继承的关系数据库时 有哪些技巧 技巧 假设我有一个经典的例子 Person gt Employee gt Manager gt Team lead gt Developer gt Customer gt Pr
  • 为 ASP.net 子控件生成 HTML“名称”属性,而不是唯一的“ID”属性

    为我的自定义 ASP net 服务器控件生成的 HTML 代码生成子控件的 name 属性 而不是 id 属性 像这样的东西 span span
  • HTTPWebResponse 原始响应,使用反射

    HTTPWebResponse 公开了 headers 的属性 是否可以获取原始响应就像我们使用套接字一样 标题和内容结合使用反射 我想一定有办法的 我可以使用套接字 但需要做很多工作才能使它们可用 例如代理支持 https 进度事件等 列
  • Javascript onclick 用 for 循环显示数组的最后一个元素

    我的问题不大 我正在研究一家公司的 KPI 我请求活动 他们给我返回一系列活动 这是代码的一部分 client requestActivities function activities if activities length gt 0
  • Android:视频录制抛出错误

    因此 我尝试使用内置相机活动来使用以下代码录制视频 Intent videoIntent new Intent MediaStore ACTION VIDEO CAPTURE videoIntent putExtra MediaStore
  • Android 在 asynctask 中设置文本

    我正在开发 UDP 程序 但我在申请时遇到问题setText in my asynctask 基本上在 UDP 服务器上 我只要求输入一个端口 然后服务器应该连接到本地主机和端口 ATextView布局中间显示 当前未连接 当我单击 连接到
  • 如何使用 LINQ、C# 向元素添加属性?

    我有一个具有许多属性的 XElement 对象 我只想向该元素添加另一个属性 我该怎么做呢 xElement Add new XAttribute Foo Bar
  • PHP/MySQL:对数据库中的重复事件进行建模,但查询日期范围

    我正在开发一个 我想要的 简单的 PHP MySQL 应用程序 作为其中的一部分 我希望能够对重复事件进行建模 但是我需要能够查询两个日期之间发生的所有事件 包括重复事件 事件只有日期 一天中的时间并不重要 我一直在研究这个问题并研究了各种
  • 在 Windows XP 中使用 SetWindowsHookEx 时出错,但在 Windows 7 中则不会

    我开发了一个使用全局键盘 鼠标挂钩的应用程序 它在 Windows 7 中完美运行 但在 Windows XP 中则不然 当我在 Windows XP 中调用 SetWindowsHookEx 时 收到错误代码 1428 int Mouse
  • 附件未通过 Laravel Mail 发送

    我正在尝试使用 Laravel 发送电子邮件并将生成的 PDF 附加到电子邮件中 电子邮件正在发送 但 pdf 未发送 笔记 使用 Laravel 版本 5 5 PHP 版本 gt 7 0 0 我用来生成pdf的库 https github
  • Pandas 列表列,为每个列表元素创建一行

    我有一个数据框 其中一些单元格包含多个值的列表 而不是存储多个 单元格中的值 我想扩展数据框 以便列表中的每个项目都有自己的行 在所有其他列中具有相同的值 所以如果我有 import pandas as pd import numpy as
  • JNI:用C代码读取文本文件并返回到sdk

    我正在尝试创建一个 Android 应用程序来使用 NDK 从文本文件中读取文本 我的 C 代码将一个字符串读入变量并将字符串变量返回到 java 代码 但是当我运行 Android 应用程序时 TextView 中显示的字符串显示为 等符