AS 手机App项目中加入 AS 做的 so 项目,App 中 的 java 代码中调用 jni 的类,报红,提示 Cannot resolve symbol

suv3389 2020-06-16 03:22:55
编译环境 Android Studio 3.5.2;

我原有一个手机app的项目,后来因为项目需要,需要增加 so 的库(关于加密解密的功能,可以移植现有的c++ 的代码);

so 的库也是我用 AS 开发,首先,我用 AS 创建了一个新项目,使用 Native C++ 创建;按照网上朋友们的博客教程(非常感谢这些提供教程和资源的程序员大侠们!),先写了简单的 class 文件,然后用 javac 编译,然后再用 javah 生成头文件,加入到项目中....

在手机 App 项目中,使用 Link C++ project with Gradle 功能,把该so项目加入到我原有的项目中,经过编译等等,竟然没有出错,然后我在mainActivity中
static {
// rc 改为其他字符串时,调用会出错,证明这里是成功调用rc了,但是,还不知道怎么用里面的类和函数
System.loadLibrary("rc");
}
载入应该成功了,因为我吧“rc”改成其他字符串时,载入会出错的。我的so项目名称是 rc;

但是,问题来了:我在调用rc中的类时(Rick Demo = new Rick();),报红,提示 “Cannot resolve symbol ”意思是找不到类;

Rick 类是我在 java 文件中声明的类,

java 文件代码如下:
package com.example.cso;
public class Rick{
static {
System.loadLibrary("rc");
}
public native int add(int i, int j);
}

下面是javah 生成的 .h 文件的代码
#include <cstring>
#include "com_example_cso_Rick.h"
#include "rc.h"

JNIEXPORT jint JNICALL Java_com_example_cso_Rick_add
(JNIEnv *env, jobject obj, jint i, jint j)
{
return i + j;
}

调用时代码
Rick Demo = new Rick();
int nrtn = demo.add(2, 5);

报红,提示 “Cannot resolve symbol ”意思是找不到类(Rick);


盼望有类似开发经验的大侠们关注一下,给点提示;

感觉现在就像是一层窗户纸,捅破就可以继续进行;但是目前我找不到这层纸在哪里


前面发了一贴,感觉描述不清楚,又发了本帖,请见谅

...全文
291 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
suv3389 2020-07-06
  • 打赏
  • 举报
回复
有空的时候会发博客解释上述问题的
  • 打赏
  • 举报
回复
受教了受教了受教了受教了
usecf 2020-06-16
  • 打赏
  • 举报
回复
librc.so放到其他库路径试试 比如 /system/lib64/ /system/lib下看看还有相同错误没
suv3389 2020-06-16
  • 打赏
  • 举报
回复
此时生成的 so 文件在 该目录下 D:\Android\****-cso\app\build\intermediates\cmake\debug\obj\armeabi-v7a\librc.so

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧