【发布时间】:2018-07-09 00:38:06
【问题描述】:
TL;DR
是否有机会在没有应用程序模块帮助的情况下在库模块中编译 Google Analytics?
我为如何在我的库中编译使用 GoogleAnalytics 苦苦挣扎了一个多星期。
目标是: 1.在android库中编译运行GoogleAnalytics 2. 维护一个应用上下文(Singletone?)
这是我尝试在我的库 build.gradle 文件中编译 GoogleAnalytics 的方式
buildscript {
ext {
support = '27.0.2' // https://developer.android.com/topic/libraries/support-library/revisions.html
kotlin = '1.2.20' // https://kotlinlang.org/docs/reference/using-gradle.html
playServices = '11.8.0'
}
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin"
classpath 'com.google.gms:google-services:3.1.0'
}
}
以及处理所有分析的代码:
class GenericSettingsAnalytics private constructor(context : Context) {
private val tracker = GoogleAnalytics.getInstance(context).newTracker(R.xml.global_tracker)
companion object {
private var instance : GenericSettingsAnalytics? = null
fun getInstance(context: Context) : GenericSettingsAnalytics {
if (instance == null) {
instance = GenericSettingsAnalytics(context)
instance!!.sendInitAnalytics(context)
}
return instance!!
}
}
fun sendEvent(category: String, action: String) {
tracker.send(HitBuilders.EventBuilder().setCategory(category).setAction(action).build())
}
fun sendInitAnalytics(context: Context) {
tracker.send(HitBuilders.EventBuilder()
.setCategory(ANALYTICS_CATEGORIES.CATEGORY_APP_INFO.categoryName)
.setAction(ANALYTICS_ACTIONS.ACTION_APP_INIT.actionName)
.setLabel(context.packageName)
.build())
}
}
非常简单的一个。 在调试中一切正常,但是在将库上传到 bintray 时(使用它的官方编译)我得到以下异常:
FATAL EXCEPTION: main
Process: com.udioshi85.genericsettings, PID: 12398
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/analytics/GoogleAnalytics;
at com.oshi.libgenericsettings.GenericSettingsAnalytics.<init>(GenericSettingsAnalytics.kt:14)
at com.oshi.libgenericsettings.GenericSettingsAnalytics.<init>(GenericSettingsAnalytics.kt:12)
at com.oshi.libgenericsettings.GenericSettingsAnalytics$Companion.getInstance(GenericSettingsAnalytics.kt:22)
at com.oshi.libgenericsettings.GenericSettingsLib$Companion.initAnalytics(GenericSettingsLib.kt:20)
at com.oshi.libgenericsettings.GenericSettingsLib$Companion.init(GenericSettingsLib.kt:16)
at com.oshi.genericsettings.GenericSettingsApp.onCreate(GenericSettingsApp.kt:10)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5827)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1673)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:172)
at android.app.ActivityThread.main(ActivityThread.java:6637)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.analytics.GoogleAnalytics"
一些想法:
在我的库 build.gradle 中,我添加了以下类路径:
buildscript {
....
dependencies {
classpath 'com.google.gms:google-services:3.1.0'
}
}
对吗?
大多数常见的库都依靠其用户从应用程序类中初始化库。类似的东西
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
MyLibrary.init(this)
}
}
我已经试过了。但仍然得到同样的例外。也许我做错了什么?
最后,我已经看过并阅读了很多关于如何集成 GoogleAnalytics 的示例。重要的是我的用户不应该在他们的 build.gradle 中添加任何东西,除了我的编译/实现库。
如果有人可以帮助我,将不胜感激。
非常感谢!
【问题讨论】:
-
您好,您找到解决方案了吗?
-
您好,您找到解决方案了吗?即使我也面临同样的问题。
标签: android google-analytics kotlin android-library