byOpen es una versión mejorada de la biblioteca dlfunctions que supera las limitaciones del sistema móvil.
porFunciones abiertas
Admite la carga y el uso de la interfaz de la biblioteca del sistema Android en la aplicación (incluso si los mapas aún no se han cargado).
En Android 7 y superior, se restringe la llamada a dlopen y System.load, aunque actualmente existen bibliotecas como Nougat_dlfunctions en Internet que evitan las restricciones de carga al encontrar la biblioteca so en los mapas.
Sin embargo, este método no funcionará para la biblioteca de la aplicación que no se ha cargado en mapas.
ByOpen no solo admite la carga de dlopen falsos desde mapas, sino que también puede cargar por la fuerza bibliotecas que aún no se han cargado en mapas, evitando las restricciones del sistema, para lograr un dlopen más universal.
Nota: El método de implementación actual es relativamente universal en teoría. Al menos probó bien en mi Android 10, pero no se ha probado completamente en detalle. Evalúe usted mismo si debe usarlo.
por Principios relacionados abiertos
El principio de implementación específico es relativamente simple. Se basa principalmente en la idea y la implementación de un método simple para evitar las restricciones de Android P en interfaces que no son SDK.
Aunque el objetivo principal de este artículo es omitir la API oculta, el método utilizado en él para disfrazarse de una llamada al sistema también se puede usar con System.loadLibrary para hacer que el sistema piense que el sistema mismo está llamando a System.loadLibrary.
Esto evita la restricción del espacio de nombres del cargador de clases de Android N, carga cualquier biblioteca en system/system/lib en mapas y luego usa dlopen falso para dlsym.
porUso de interfaz abierta
Las bibliotecas estáticas e interfaces relevantes se encuentran en: dlopen.h
Los métodos de uso relevantes son exactamente los mismos que los del dlopen nativo.
typedef by_char_t const* (*curl_version_t)();
by_pointer_t handle = by_dlopen("libcurl.so", BY_RTLD_LAZY);
si (manejar)
{
by_pointer_t addr = by_dlsym(handle, "curl_version");
si (dirección)
{
curl_version_t curl_version = (curl_version_t)addr;
by_print("curl_version: %s", curl_version());
}
by_dlclose(manejar);
}