【发布时间】:2012-07-25 05:51:01
【问题描述】:
我在 Android 中工作,正在编写一些 JNI 代码,并且正在寻找一种从设备查询移动设备标识符 (MEID) 的方法。
http://en.wikipedia.org/wiki/Mobile_equipment_identifier
我正在尝试编写可以在 Android 设备上自行运行的 C 或 C++ 代码,所以我认为我不能使用 Java(即从TelephonyManager 获取 MEID)。
搜索 StackOverflow 发现:Is there an android shell or adb command that I could use to get a device's IMEI/MEID?
好的,dumpsys iphonesubinfo 可以获得我需要的信息。它有效!
我找不到 dumpsys 的源代码,除非它是 Android 源代码的一部分。所以我下载了那个......我的硬盘在下载完成之前就已经装满了,但我确实得到了源代码到dumpsys。这是一个非常短的 C++ 文件。它所做的只是查询 Android 的IBinder 接口。
所以,我的问题:
0) 有什么方法可以只使用 NDK 中的内容编写针对 IBinder 的查询? dumpsys.cpp 使用的包含文件不在 NDK 中,并且 NDK 目录中的 grep 在任何包含文件或代码示例中都没有找到 IBinder,所以我的猜测是“否”(但我想错了)。
1) 还有其他获取 MEID 的好方法吗?
我在认真考虑我应该只使用system("dumpsys iphonesubinfo > /tmp/myprogname_dumpsys.tmp",然后打开生成的文件并解析它。这应该可行,但我很难称其为优雅......而且我不确定dumpsys 是否在每台 Android 设备上都可用。
编辑:使用system() 运行dumpsys 的想法行不通,因为dumpsys 需要android.permission.DUMP 而Android 不再允许非系统应用拥有该权限。
【问题讨论】:
-
dumpsys是一个平台系统文件,所以我认为它适用于所有安卓设备。 -
另外,如果你想写一个像
dumpsys这样的查询,你可以通过 NDK 但我记得你拥有所有需要的权限。 -
@user370305 -- 如何通过 NDK 编写类似
dumpsys的查询? -
使用与
dumpsys相同的代码。但我怀疑dumpsys有权访问所有系统文件。 -
我不能使用
dumpsys使用的相同代码,因为dumpsys使用的代码不在 NDK 中。我不希望我的代码必须依赖于作为 Android 系统源代码一部分但未放入 NDK 的“秘密”代码。
标签: android c++ c android-ndk java-native-interface