在runtim处找不到Android Native库文件

问题描述 投票:0回答:1

我正在为学校项目构建一个 VPN 应用程序(使用 v2ray 协议),我正在尝试使用这个(https://github.com/dev7dev/V2ray-Android)库,如果我只是构建提供的项目文件,但是当我创建自己的项目并按照说明导入模块时,我收到运行时错误,指出 jnilib“libtun2socks.so”文件不存在(无法运行程序“/data/app/com. example.bobvpn5-JTEQwsRle2opKu7bKLubFg==/lib/arm64/libtun2socks.so”(在目录“/data/user/0/com.example.bobvpn5/files”中):错误=2,没有这样的文件或目录)。

我分析了我的 apk 文件,该文件实际上在 apk 中,但只是未正确加载。我用这段调试代码来验证:

File file = new File(getApplicationInfo().nativeLibraryDir, "libtun2socks.so");
        if (file.exists()) {
            Log.d("!!!MainActivity", "libtun2socks.so exists at " + file.getAbsolutePath());
        } else {
            Log.e("!!!MainActivity", "libtun2socks.so does NOT exist");
        }

并在提供的项目和我自己的项目上进行了测试。提供的项目显示它存在(如预期),而我的项目的调试显示它不存在。我还注意到我的项目linker error有这个链接器错误,运行提供的项目时不会出现该错误。

在过去的两天里,我怀疑这与我的 gradle 配置有关(因为我的 gradle + AGP 版本高于提供的项目),但现在我不知道 gradle 是否是问题,因为我已经检查了我的配置 60 亿次,确保正确的 jniSrcDirs 、应用程序级别、项目级别、v2ray 级别的 gradle 配置设置等..

我可以向任何人提供帮助我的项目文件。

提前非常感谢您,我抓狂了,因为我的项目和他的项目之间几乎所有内容都是相同的。 PS我的项目只是一个准系统项目,没有可能干扰的额外代码。 .so 本机库不可能有问题,因为它们是相同的文件。并且也在具有相同架构的相同设备上运行。

java android gradle android-gradle-plugin java-native-interface
1个回答
0
投票

我也有同样的问题。在分析V2RayNG时,我在build.gradle(模块级别)中找到了这段代码:

sourceSets {
    getByName("main") {
        jniLibs.srcDirs("libs")
    }
}

packaging {
    jniLibs {
        useLegacyPackaging = true
    }
}

并确保此本机文件位于 app/libs 文件夹中

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.