3

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

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

-> 然后打开Android Studio,选择“Import project (Eclipse ADT, Graddle, etc)”

-> 运行

-> 应用程序在启动时崩溃,异常:“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')
}

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

4

1 回答 1

10

==TLDR==

您需要配置 Unity 的 Android Build Settings来自定义文件并在导出项目时build.gradle发出文件:proguard-user.txt

  1. 单击文件菜单->单击构建设置菜单项->在构建设置窗口 中选择Android在此处输入图像描述
  2. 将构建系统更改为Gradle并选中导出项目
  3. 点击播放器设置按钮
  4. 单击播放器设置检查器选项卡 中的发布设置在此处输入图像描述
  5. 选中Build部分下的Custom Gradle TemplateUser Proguard File
  6. 在Minify部分下选择Proguard for Release
  7. 编辑Assets/Plugins/Android/mainTemplate.gradleAssets/Plugins/Android/proguard-user.txt文件,使其如下所示。

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 构建系统导出项目时遇到了类似的问题。术语有点不同,但可能是因为我使用的是不同的 Unity 版本 (2017.1.1f1)。

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

我在尝试执行 a 时遇到以下错误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 buildTypebuild.gradle中的定义如下:

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

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

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

值得庆幸的是,@MikeBonnell 向我指出了 Fabric Android Crashlytics 集成文档,该文档告诉您如何在 ProGuard 文件中从缩小中排除 Crashlytics,并且如果您使用 Gradle,则必须在 build.gradle 文件中包含该文档。minifyEnabled: true

于 2017-10-19T23:02:55.443 回答