Cómo obtener la ruta de la carpeta lib de un paquete instalado

Los archivos .so de las bibliotecas compartidas se colocan en lib / armeabi en un archivo apk.

He leído después de la instalación las libs se extrae a / data / data / application_package / lib

¿Cómo puedo obtener la ruta exacta a este directorio en mi aplicación en tiempo de ejecución? ¿Es este directorio legible por la aplicación? ¿O sólo se permite el acceso ejecutable? Si es legible – ¿Esto sigue siendo cierto para las aplicaciones protegidas contra copia?

Puede obtener la ruta exacta con:

String libraryPath = getContext().getApplicationInfo().dataDir + "/lib"; 

El directorio y sus archivos son legibles por la aplicación.

Los permisos unix se establecen en rwxr-x--x . Así que las aplicaciones con el mismo grupo pueden leer los archivos.

Añadido en API nivel 9

getContext().getApplicationInfo().nativeLibraryDir;

 String libraryPath = context.getFilesDir().getParentFile().getPath() + "/lib"; 

Para una mejor compatibilidad, utilice la siguiente función:

 @TargetApi(Build.VERSION_CODES.GINGERBREAD) public static String getLibraryDirectory(Context context) { int sdk_level = android.os.Build.VERSION.SDK_INT; if (sdk_level >= Build.VERSION_CODES.GINGERBREAD) { return context.getApplicationInfo().nativeLibraryDir; } else if (sdk_level >= Build.VERSION_CODES.DONUT) { return context.getApplicationInfo().dataDir + "/lib"; } return "/data/data/" + context.getPackageName() + "/lib"; } 

Tal vez un dispositivo de apoyo diferentes CPU_ABIs, por lo que es mejor para obtener nativeRootLibraryDir que contienen todos los subdirectorios lib:

 public static String getNativeLibraryDirectory(Context context) { int sdk_level = android.os.Build.VERSION.SDK_INT; if (sdk_level >= Build.VERSION_CODES.GINGERBREAD) { try { String secondary = (String) ApplicationInfo.class.getField("nativeLibraryRootDir").get(context.getApplicationInfo()); return secondary; } catch (Exception e) { e.printStackTrace(); } return null; } else if (sdk_level >= Build.VERSION_CODES.DONUT) { return context.getApplicationInfo().dataDir + "/lib"; } return "/data/data/" + context.getPackageName() + "/lib"; } 
  • ¿Podemos habilitar pie (es decir, ejecutables independientes de posición) para bibliotecas compartidas en android-ndk r10c?
  • Explicación detallada para el perfil de "adb shell dumpsys meminfo mi-app-name"?
  • ndk-gdb y ndk-gdb.py Errores
  • Uso de NDK con STL en Android Studio gradle project
  • ¿Cuánto es demasiado asignación de memoria en NDK?
  • OpenVPN y Android NDK
  • Lectura de archivos de recursos de mi propio APK en Android Native Environment
  • Cómo capturar UnsatisifiedLinkError cuando se utiliza biblioteca NDK-construida en una aplicación para Android?
  • La aplicación se bloquea al cargar la biblioteca nativa para webRTC
  • Integración de Unity con Eclipse - ¿Comunicación?
  • Integración de android ndk ndk-gdb con emacs?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.