如何使用Android NDK获取图书馆信息?

时间:2012-12-21 12:56:39

标签: android android-ndk shared-libraries

使用Android NDK是否可以(从本机C代码)获取已加载的.so库列表?我正在寻找Android版本的iOS函数_dyld_image_count()/ _ dyld_get_image_name()。

还可以获取包含特定函数的.so的库名称(在iOS上,此函数是dladdr())。

2 个答案:

答案 0 :(得分:1)

是的,你可以在这里找到样本

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...

    }

试试这个可能会帮助你

答案 1 :(得分:1)

您可以阅读并解析/proc/self/maps文件。它包含为应用程序加载的每个共享对象的地址。 self将帮助您的应用程序阅读自己的信息。

在Android NDK中也可用的

nm命令行utiliy可以显示某些共享对象文件中可用的符号。您可以查看它是如何实现的,并尝试使用相同的库,但这不会是微不足道的。