How to get the path to the lib folder for an installed package

后端 未结 6 2080
自闭症患者
自闭症患者 2020-12-14 03:40

Shared libraries .so files are placed in lib/armeabi in an apk file.

I have read after installation the libs gets extracted to /data/data/application_package/lib

6条回答
  •  执念已碎
    2020-12-14 04:29

    And if you're using a native activity and C++:

    void ANativeActivity_onCreate(ANativeActivity* app, void*, size_t) {
        const jclass contextClass = app->env->GetObjectClass(app->clazz);
        const jmethodID getApplicationContextMethod =
            app->env->GetMethodID(contextClass, "getApplicationContext", "()Landroid/content/Context;");
        const jobject contextObject =
            app->env->CallObjectMethod(app->clazz, getApplicationContextMethod);
        const jmethodID getApplicationInfoMethod = app->env->GetMethodID(
            contextClass, "getApplicationInfo", "()Landroid/content/pm/ApplicationInfo;");
        const jobject applicationInfoObject =
            app->env->CallObjectMethod(contextObject, getApplicationInfoMethod);
        const jfieldID nativeLibraryDirField = app->env->GetFieldID(
            app->env->GetObjectClass(applicationInfoObject), "nativeLibraryDir", "Ljava/lang/String;");
        const jobject nativeLibraryDirObject =
            app->env->GetObjectField(applicationInfoObject, nativeLibraryDirField);
        const jmethodID getBytesMethod = app->env->GetMethodID(
            app->env->GetObjectClass(nativeLibraryDirObject), "getBytes", "(Ljava/lang/String;)[B");
        const auto bytesObject = static_cast(app->env->CallObjectMethod(
            nativeLibraryDirObject, getBytesMethod, app->env->NewStringUTF("UTF-8")));
        const size_t length = app->env->GetArrayLength(bytesObject);
        const jbyte* const bytes = app->env->GetByteArrayElements(bytesObject, nullptr);
        const std::string libDir(reinterpret_cast(bytes), length);
    

提交回复
热议问题