You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我的应用违反Android Advertising ID政策,如何排查依赖获取IMEI?

排查依赖中获取IMEI的方法

别担心,我帮你梳理几个靠谱的方法来找出哪个依赖在悄悄获取IMEI,解决Google Play的政策驳回问题:

1. 用Android Studio Lint快速检测

Android Studio自带的Lint工具能直接定位调用IMEI相关API的代码,步骤很简单:

  • 点击顶部菜单栏的 Analyze → Inspect Code...
  • 在弹出窗口中选择整个项目,点击OK开始检查
  • 检查完成后,在结果面板的Security分类下,找Using IMEI without permission或类似条目,里面会明确显示调用getDeviceId()(获取IMEI的核心方法)的类和所属依赖库

2. 全局搜索IMEI相关API

用Android Studio的全局搜索功能直接定位调用:

  • 按下快捷键 Ctrl+Shift+F(Mac是Cmd+Shift+F),打开Find in Path窗口
  • 搜索关键词:getDeviceId、getImei(Android 6.0+的API)
  • 在Scope下拉框中选择External Libraries,只搜索依赖库代码
  • 搜索结果会直接显示哪个依赖库的哪个类调用了这些方法,一目了然

3. 日志追踪调用栈

如果上面的方法没找到,你可以通过Hook获取IMEI的方法,打印调用栈来溯源:
用AspectJ织入代码(需要先配置AspectJ依赖),在Application初始化时添加追踪逻辑:

@Aspect
public class ImeiTracker {
    @Around("call(* android.telephony.TelephonyManager.getDeviceId()) || call(* android.telephony.TelephonyManager.getImei(int))")
    public Object trackImeiCall(ProceedingJoinPoint joinPoint) throws Throwable {
        // 打印完整调用栈
        StringBuilder stackTrace = new StringBuilder("IMEI调用栈:\n");
        for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
            stackTrace.append(element.toString()).append("\n");
        }
        Log.d("IMEI_TRACKER", stackTrace.toString());
        // 继续执行原方法
        return joinPoint.proceed();
    }
}

运行App后,查看Logcat中的IMEI_TRACKER日志,就能清楚看到是哪个依赖库的代码触发了IMEI获取。

4. 针对性排查可疑依赖

从你的依赖列表来看,重点排查这几个库:

  • Batch SDK(1.11.0):旧版本的Batch可能默认收集设备标识符,建议查看官方文档,确认是否有禁止收集IMEI的配置开关,或者直接升级到最新版本
  • Zooz SDK(本地jar):本地依赖的jar包容易被忽略,直接反编译这个jar,搜索是否有调用IMEI相关API的代码
  • Crashlytics:虽然Crashlytics主要收集崩溃信息,但也可以检查其配置,确认是否有默认收集设备标识符的行为

另外,你已经配置了AppsFlyer不收集IMEI,所以可以暂时排除它的嫌疑。


内容的提问来源于stack exchange,提问作者Ignasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:55:03