【问题标题】:Does the Android NDK encrypt compiled c++ files?Android NDK 是否加密编译的 c++ 文件?
【发布时间】:2020-02-10 10:53:28
【问题描述】:

我的 Android 项目中有一个 C++ 文件 (native-lib.cpp):

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_keysnative_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string api_key = "0123456789abcdef";
    return env->NewStringUTF(api_key.c_str());
}

当我构建项目并解压apk时,这个文件将被编译成二进制:lib/x86/libnative-lib.so

如果我尝试将此文件导入另一个项目并将其使用到另一个项目中,则会出现错误:

public class Main {

    static {
        try {
            System.load("/Users/u/Playground/KeysNative/app-debug/lib/x86/libnative-lib.so");
        } catch (UnsatisfiedLinkError e) {
            System.err.println(e);
            System.exit(1);
        }
    }
}

java.lang.UnsatisfiedLinkError: /Users/u/Playground/KeysNative/app-debug/lib/x86/libnative-lib.so: dlopen(/Users/u/Playground/KeysNative/app-debug/lib/x86 /libnative-lib.so, 1): 没有找到合适的图像。发现: /Users/u/Playground/KeysNative/app-debug/lib/x86/libnative-lib.so:未知文件类型,前八个字节:0x7F 0x45 0x4C 0x46 0x01 0x01 0x01 0x00 /Users/u/Playground/KeysNative/app-debug/lib/x86/libnative-lib.so:未知文件类型,前八个字节:0x7F 0x45 0x4C 0x46 0x01 0x01 0x01 0x00

问题:这些文件是否使用要编译的项目中的 java keystore 或任何其他类型的签名?

【问题讨论】:

  • 您尝试加载的文件是一个 ELF 共享对象,它可能还依赖于 Android 的某种自定义 libc 实现。从您的日志来看,您正试图在 MacOS 系统上加载此库,但这是行不通的,因为 MacOS 使用不同的动态库格式。
  • 那么尝试在任何其他 android 应用程序中运行此共享对象文件是否可行? 5分钟后确认

标签: java android c++ android-ndk


【解决方案1】:

您无法从移动设备上的计算机文件系统加载本机汇编。

这应该已经足够链接程序集了:

static {
    try {
        System.loadLibrary("libnative-lib");
    } catch (UnsatisfiedLinkError e) {
        Log.e(LOG_TAG, "" + e.getMessage());
    }
}

但是,如果您只有 x86 程序集,则这只适用于 x86 Android 模拟器。

【讨论】:

  • 尝试在 Java 中加载二进制文件是在我的计算机上运行的,它也在不同的目录中,因此是完整路径。尝试System.load("libnative-lib") 会抛出“java.lang.UnsatisfiedLinkError: Expecting a absolute path of the library: libnative-lib.so”
  • 其实是System.loadLibrary("libnative-lib")
【解决方案2】:

正如@Michael 所说,由于.so 是从Android NDK 生成的,它包含Android 依赖项,因此只能在Android 系统上运行。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多