Как определить, какие собственные общие библиотеки загружаются приложением Android - PullRequest
10 голосов
/ 05 января 2012

Мое приложение использует собственную разделяемую библиотеку (.so), я загружаю ее, вызывая System.loadLibrary("xxx").Он отлично загружается, и я могу вызывать нативные методы.

Интересно, есть ли возможность определить, какие приложения используются общими библиотеками.Я попытался перечислить загруженные библиотеки с помощью PackageManager:

PackageManager pm = getPackageManager();
String applicationPackage = this.getApplicationInfo().packageName;
ApplicationInfo ai = pm.getApplicationInfo(applicationPackage, PackageManager.GET_SHARED_LIBRARY_FILES);
String[] soFiles = ai.sharedLibraryFiles;

, но он возвращает пустой список.Это работает, только если мое приложение использует некоторые библиотеки .jar, такие как com.google.android.maps, которые я указываю uses-library в теге приложения манифеста.

Как я могу перечислить библиотеки .so?

Ответы [ 2 ]

13 голосов
/ 05 января 2012

Решение простое, большое спасибо @ praetorian-droid

  try {
        Set<String> libs = new HashSet<String>();
        String mapsFile = "/proc/" + android.os.Process.myPid() + "/maps";
        BufferedReader reader = new BufferedReader(new FileReader(mapsFile));
        String line;
        while ((line = reader.readLine()) != null) {
            if (line.endsWith(".so")) {
                int n = line.lastIndexOf(" ");
                libs.add(line.substring(n + 1));
            }
        }
        Log.d("Ldd", libs.size() + " libraries:");
        for (String lib : libs) {
            Log.d("Ldd", lib);
        }
    } catch (FileNotFoundException e) {
        // Do some error handling...
    } catch (IOException e) {
        // Do some error handling...
    }
5 голосов
/ 26 января 2017

Используйте этот код для отображения общих собственных библиотек, которые можно загрузить из вашего приложения:

final File nativeLibraryDir = new File(getApplicationInfo().nativeLibraryDir);
final String[] primaryNativeLibraries = nativeLibraryDir.list();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...