簡體   English   中英

Android NDK 會加密編譯的 c++ 文件嗎?

[英]Does the Android NDK encrypt compiled c++ files?

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

#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 或任何其他類型的簽名?

您無法從移動設備上的計算機文件系統加載本機匯編。

這應該足以鏈接程序集:

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

但是,如果您只有x86程序集,則這僅適用於x86 Android 模擬器。

正如@Michael 所說,因為 .so 是從 Android NDK 生成的,它包含 Android 依賴項,因此只能在 Android 系統上運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM