How To Get The Path To The Lib Folder For An Installed Package
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 How can I get the
Solution 1:
Added in API level 9
getContext().getApplicationInfo().nativeLibraryDir;
Solution 2:
You can get the exact path with:
StringlibraryPath= getContext().getApplicationInfo().dataDir + "/lib";
The directory and its files are readable by the application.
The unix permissions are set to rwxr-x--x
. So applications with
the same group can read the files.
Solution 3:
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<jbyteArray>(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<const char*>(bytes), length);
Solution 4:
Stringlibpath= getApplicationInfo().nativeLibraryDir;
Class used: import android.content.pm.ApplicationInfo;
Solution 5:
StringlibraryPath= context.getFilesDir().getParentFile().getPath() + "/lib";
For better compatibility, use the following function:
@TargetApi(Build.VERSION_CODES.GINGERBREAD)publicstatic String getLibraryDirectory(Context context) {
intsdk_level= android.os.Build.VERSION.SDK_INT;
if (sdk_level >= Build.VERSION_CODES.GINGERBREAD) {
return context.getApplicationInfo().nativeLibraryDir;
}
elseif (sdk_level >= Build.VERSION_CODES.DONUT) {
return context.getApplicationInfo().dataDir + "/lib";
}
return"/data/data/" + context.getPackageName() + "/lib";
}
Post a Comment for "How To Get The Path To The Lib Folder For An Installed Package"