如何在运行时访问apk中的.so文件?

时间:2014-11-10 05:14:50

标签: android android-ndk

我希望在运行时访问(读取)我在NDK中构建的.so文件 检查其哈希值。

为此,我使用了AAssetManager_open()函数,但总是失败。

const char* filename = "/data/data/com.mycompany.app/lib/libmyndk.so"; // failed with this.

const char* filename = "assets/libmyndk.so"; // Also failed with this.

AAsset* asset = AAssetManager_open(mgr, (const char*) filename, AASSET_MODE_UNKNOWN);

请让我知道为什么它会一直失败。

5 个答案:

答案 0 :(得分:1)

我解决了这个问题。我们不需要使用AssetManager来进行简单的访问。

在NDK(c / c ++文件)中使用fopen()。

例如,

void initNDK()
{
     const char* filename = "/data/data/com.company.app/lib/libmyndk.so";
     FILE* fp = fopen(filename, "rb");
     if(fp) 
         TRACE("Success");
     else
         TRACE("Failure");
}

谢谢大家。

答案 1 :(得分:0)

你在应用程序启动时加载了.so文件。

通过

static {
    System.loadLibrary("libpacman");
}

比您可以访问文件。

我希望这对你有所帮助。

答案 2 :(得分:0)

你试过了吗?

const char* filename = "libmyndk.so";

答案 3 :(得分:0)

最重要的是,我成功地使用AAssetManager_open()读取/访问assets文件夹中的某些文件。 但是这个AAssetManager_xxxx()函数似乎只能用于访问assets文件夹中的文件。

我想要做的是访问我在NDK中构建的.so文件。仍在寻找答案。

答案 4 :(得分:-1)

如果你想使用原生文件,你需要使用android NDK。

如果您使用Eclipce,此链接将为您提供帮助:How do I import a native library (.so file) into Eclipse?

这适用于Android Studio:http://www.kylethielk.com/blog/include-native-so-library-in-apk-with-android-studio/

我希望它有助于解决您的问题。