Skip to main content

Android 常见问题

1. 集成SDK后本地运行打包没问题,线上自动化打包发现SDK报错,该怎么处理?

A: 需要排查线上打包环境与本地环境哪里不一致,并非SDK 的问题

2. 升级SDK后发现有一部分接口无法使用,该怎么处理?

A: 可以在 SDK Releases 中查看接口变更记录。 一般接口会先在当前版本标识废弃接口/功能,然后将在下一个大版本中移除(如3.4.x中标识@Deprecated,在升级到3.5.x时相关接口/功能将被移除)

4. Android 运行报错NoClassDefFoundError,该怎么处理?

**A:**确认手动安装debug包后依然崩溃的话,麻烦您注释所有混淆代码再试一次,看是否会崩溃。 让客户试试把混淆代码都注释试试。类找不到一般都是未正常混淆代码
如果以上办法还未解决参考如下:
①查看初始化是否正确onCreate()添加的顺序是否正确,一定要先执行super.onCreate();再初始化GrowingIO,在BaseApplication
②检查debug模式下类比release多,分成两个dex包了
③查看手机系统6.0默认支持multidex的,4.4太低了,继承一下MultiDexApplication就都可以支持了

5. Android SDK 获取访问用户ID 返回 null,是在初始化之后获取的,可能是什么原因?

A: 初始化失败的时候,会返回有个EmptyGrowingIO,此时调用就会返回null。看下初始化growing的log日志,失败会在在log中输出有对应的原因。 已知的失败原因有如下代码判断:

6. Android SDK 包文件同步报错,或报找不到包文件,包文件不存在,该怎么处理?

Could not HEAD. Received status code 400 from server: Bad Request


A: 在开发工具中按照如下步骤进行操作

  1. Preferences->Appearance & Behavior->System Settings->HTTP Proxy 设置为 No proxy
  2. 去掉项目中 gradle.properties 里的代理配置信息
  3. 去掉 .gradle/gradle.properties 里的代理配置信息
  4. 重试 sync

7.Android 打包的问题, Invalid opcode 169

提示:
[Autotrack.error] Unfortunately, an error has occurred while processing com/google/iot/protobuf/DescriptorProtos$UninterpretedOption. Please copy your build logs and the jar containing this class and visit https://www.growingio.com, thanks! Invalid opcode 169
**A:**这个是asm 7.0上的问题,问题源自: https://gitlab.ow2.org/asm/asm/-/issues/317873
客户可以在编译配置的时候 exclude 这个包 “com/google/iot”
agp7.0之后使用了asm7.0的库,asm7.0对java1.6编译的类处理有问题,确认一下这个类来自哪个包,如果没有注入的需要可以exclude掉这个package或者不处理这个异常
./gradlew buildEnvironment 可以看哪个插件依赖了 asm7.0的库
如果需要解决这个问题可以依赖asm 7.2的版本修复
这是asm上的issue以及修复的commit
issue: https://gitlab.ow2.org/asm/asm/-/issues/317873
commit: https://gitlab.ow2.org/asm/asm/-/commit/c4241012de8e0502dfe98bd036ab469e622e06fc

8.延迟初始化之后,发现丢掉了部分事件,为什么?

**A:**对于SDK初始化之前,或者开启数据采集之前发生的事件,一概丢弃。

9.什么是 SNAPSHOT 版本?

**A:**拥有该后缀的SDK版本属于测试阶段的SDK快照版本,在完成测试后会将其转为正式版本。 若要使用提前使用该版本,请在 project 级别的 build.gradle 下添加以下依赖包仓库

//如果你的版本为 xxx-SNAPSHOT 版本,则需要加入该仓库。与 mavenCentral() 同级
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }

10.若minSdkTarget Android5.0及以下使用了 multidex该怎么处理?

**A:**需要在app的build.gradle中添加如下配置将sdk中contentprovider添加到主dex中 具体配置方式可以参考 multiDexKeepFile 属性

android {
buildTypes {
release {
multiDexKeepFile file('multidex-config.txt')
...
}
}
}

并在 multidex-config.txt 中增加如下类

com/growingio/android/sdk/track/middleware/EventsContentProvider.class
com/growingio/android/sdk/track/middleware/EventsInfoTable.class
com/growingio/android/sdk/track/middleware/EventsSQLiteOpenHelper.class

11. autotracker-gradle-plugin默认依赖版本是多少?如何在低版本中使用?

A: autotracker-gradle-plugin默认支持低版本AGP,如 com.android.tools.build:gradle:3.3.0, 如果希望 在 gradle 低版本中使用该依赖插件,请阻断插件中gradle的版本

// 在配置插件依赖时, 通过如下方式引入
classpath("com.growingio.android:autotracker-gradle-plugin:3.3.5") {
transitive false
}

12. APP内嵌H5页面需要与APP访问用户数据打通该怎么集成SDK?

**A:**详细请参内嵌h5页面数据采集配置

13. SDK如何支持合规和第三方安全检测,以及GDPR(欧盟《一般数据保护条例》)?

**A:**参考Android SDK合规说明