3

Unity プロジェクトに Crashlytic プラグインを統合しました。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')
}

以前にこの問題を抱えた人はいますか?

4

1 に答える 1

10

==TLDR==

ファイルをカスタマイズし、プロジェクトをエクスポートするときにファイルを出力するには、Unity の Androidビルド設定を構成する必要があります。build.gradleproguard-user.txt

  1. [ファイル] メニューをクリックします -> [ビルド設定]メニュー項目をクリックします -> [ビルド設定]ウィンドウ で[ Android ] を選択しますここに画像の説明を入力
  2. ビルド システムGradleに変更し、[プロジェクトのエクスポート]ボックスをオンにします。
  3. プレイヤー設定ボタンをクリック
  4. [プレーヤー設定]インスペクタ タブ で[公開設定]をクリックします。ここに画像の説明を入力
  5. [ビルド]セクションの下にある[カスタム Gradle テンプレート] ボックスと[ユーザー Proguard ファイル]ボックスの両方をオンにします。
  6. [縮小]セクションで[ Proguard for Release ] を選択します
  7. Assets/Plugins/Android/mainTemplate.gradleおよびファイルを編集して、Assets/Plugins/Android/proguard-user.txt以下のようにします。

mainTemplate.gradlebuildTypes 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 プロジェクトのエクスポートに関する問題について説明しています (最後の太字の文に注意してください)。

2 つの ProGuard 構成ファイルを指定しました。1 つは Android SDK に含まれている標準のファイル (proguard-android.txt) で、もう 1 つは Unity 5.4 の時点で Unity プロジェクトにエクスポートされているファイル (proguard-unity.txt) です。ゲームで使用するプラグイン用に保持する必要があるクラスとメソッドを指定するルールを使用して、別の ProGuard 構成ファイルを維持する必要があることはほぼ確実です。

ありがたいことに、@MikeBonnell は Fabric Android Crashlytics 統合ドキュメントを教えてくれました。このドキュメントには、Crashlytics をProGuard ファイルの縮小から除外する方法と、 Gradle を使用している場合は build.gradle ファイルに含める必要がある方法が記載されています。minifyEnabled: true

于 2017-10-19T23:02:55.443 に答える