Crashlytics Unity插件 - 导出到Android Studio

时间:2017-05-04 04:44:47

标签: android unity3d google-fabric

我将Crashlytic插件集成到我的Unity项目中。如果我直接从Unity构建一个APK文件,它可以正常工作。

但是如果我在Unity中使用选项导出到“Google Android Project”

- >然后打开Android Studio,选择“导入项目(Eclipse ADT,Graddle等)”

- >运行

- >启动时应用程序崩溃,异常:“java.lang.ClassNotFoundException:io.fabric.unity.android.FabricApplication”

这是我的 build.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "25.0.2"

defaultConfig {
    applicationId "com.xct.poke.khongchien"
    minSdkVersion 15
    targetSdkVersion 25
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {
compile project(':answers')
compile project(':an_social')
compile project(':beta')
compile project(':common')
compile project(':crashlytics')
compile project(':crashlyticswrapper')
compile project(':fabric')
compile project(':fabricinit')
compile project(':facebookandroidsdk470')
compile project(':facebookandroidwrapperrelease')
compile project(':googleAIDL')
compile project(':googlePlay')
compile project(':unityadsrelease')
compile 'com.android.support:support-v4:23.4.0'
compile 'com.google.android.gms:play-services-analytics:9.0.0'
compile 'com.google.android.gms:play-services-auth:9.0.0'
compile files('libs/bolts-android-1.2.0.jar')
compile files('libs/EtceteraPlugin.jar')
compile files('libs/mobilenativepopups.jar')
compile files('libs/Prime31UnityActivity.jar')
compile files('libs/unity-classes.jar')
compile files('libs/WebViewPlugin.jar')
}

之前有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:5)

<强> == TLDR ==

您需要配置Unity的构建设置以自定义build.gradle文件,并在导出项目时发出proguard-user.txt文件:

  1. 点击文件菜单 - &gt;单击构建设置菜单项 - &gt;在 Build Settings 窗口中选择 Android enter image description here
  2. 构建系统更改为 Gradle 并检查导出项目
  3. 点击播放器设置按钮
  4. 点击播放器设置检查器标签中的发布设置 enter image description here
  5. 检查 Build 部分
  6. 下的自定义Gradle模板用户Proguard文件
  7. Minify 部分
  8. 下为发布选择 Proguard
  9. 修改Assets/Plugins/Android/mainTemplate.gradleAssets/Plugins/Android/proguard-user.txt文件,如下所示。
  10. mainTemplate.gradle 应该在buildTypes release部分中显示此内容:

    release {
      minifyEnabled true
      useProguard true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt', 'proguard-user.txt'
    }
    

    proguard-user.txt 如下所示:

    -keepattributes *Annotation*
    -keepattributes SourceFile,LineNumberTable
    -keep public class * extends java.lang.Exception
    -keep class com.crashlytics.** { *; }
    -dontwarn com.crashlytics.**
    

    ==我的具体情况== 我在使用Unity中的Gradle Build System导出项目时遇到了类似的问题。术语有点不同,但可能是因为我使用的是其他Unity版本(2017.1.1f1)。

    此外,我没有尝试导入Android Studio,而是尝试使用Gradle从命令行构建。

    尝试执行类似但不同的gradlew assembleRelease时出现以下错误:

    java.lang.RuntimeException: Unable to create application io.fabric.unity.android.FabricApplication: io.fabric.unity.android.b: Could not instantiate kits
    ....
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.crashlytics.android.Crashlytics" on path: DexPathList[[zip file "..."]]
    

    我注意到根release中的buildType build.gradle定义如下:

        release {
          minifyEnabled true
          useProguard true
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'
        }
    

    Kongregate on Unity的博客文章中,他们谈到了导出Android项目的问题,他们提到了(注意最后一个粗体句子):

      

    我们指定了两个ProGuard配置文件 - Android SDK(proguard-android.txt)附带的标准配置文件,以及Unity 5.4(Unityuard-unity.txt)中Unity项目导出的配置文件。 您几乎肯定需要维护另一个ProGuard配置文件,其中包含规则,指定您的游戏使用的插件需要保留哪些类和方法。

    值得庆幸的是,@ MikeBonnell向我指出了Fabric Android Crashlytics集成文档,它告诉您ProGuard文件中的how to exclude Crashlytics from minification以及build.gradle文件中的you must have minifyEnabled: true(如果您正在使用Gradle)。