gpt4 book ai didi

Android -- 从 JNI 获取 MEID

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:56 33 4
gpt4 key购买 nike

我在 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 接口(interface)。

所以,我的问题:

0) 有什么方法可以仅使用 NDK 中的内容编写针对 IBinder 的查询吗? dumpsys.cpp使用的include文件不在NDK中,NDK目录下的grep没有在任何include文件中找到IBinder或代码示例,所以我的猜测是“否”(但我想是错误的)。

1)有没有其他获取MEID的好方法?

我认真地想我应该只使用 system("dumpsys iphonesubinfo >/tmp/myprogname_dumpsys.tmp" 然后打开生成的文件并解析它。那应该可行,但我几乎不会称之为优雅......我不确定 dumpsys 是否在每台 Android 设备上都可用。

编辑:使用system() 来运行dumpsys 的想法是行不通的,因为dumpsys 需要android.permission。 DUMP 和 Android 不再允许非系统应用拥有该权限。

Dumpsys permission denial in java

最佳答案

我相信 Dalvik 实现了与 JVM 相同的所有 JNI 接口(interface),因此虽然它有点繁琐,但完全有可能通过 JNI 从 native 代码调用任意 Java 类和方法。

/* assuming you already have */
JNIEnv *env;
jobject context;
/* then call (with error-checking) */
jclass cls = (*env)->FindClass(env, "android/context/Context");
jmethodId mid = (*env)->GetMethodID(env, context_cls, "getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;");
jfieldID fid = (*env)->GetStaticFieldID(env, cls, "TELEPHONY_SERVICE",
"Ljava/lang/String;");
jstring str = (*env)->GetStaticObjectField(env, cls, fid);
jobject telephony = (*env)->CallObjectMethod(env, context, mid, str);
cls = (*env)->FindClass(env, "android/telephony/TelephonyManager");
mid =(*env)->GetMethodID(env, cls, "getDeviceId", "()Ljava/lang/String;");
str = (*env)->CallObjectMethod(env, telephony, mid);
jsize len = (*env)->GetStringUTFLength(env, str);
char* deviceId = calloc(len + 1, 1);
(*env)->GetStringUTFRegion(env, str, 0, len, deviceId);
(*env)->DeleteLocalRef(env, str);
/* to get a string in deviceId */

关于Android -- 从 JNI 获取 MEID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11643498/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com