質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.36%

cocos2d-x(v3.14.1)のandroidで、sdkbox::PluginShare::init()時にクラッシュしてしまう

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,303

score 55

前提・実現したいこと

androidで、sdkboxのtwitterシェア機能(画像付き)を実装したいのですが、
android版のみ

sdkbox::PluginShare::init();


の部分でクラッシュしてしまいます。
iOSは問題なく動作しています。

発生している問題・エラーメッセージ

下記logcatを拾ったエラーメッセージになります。
twitter以外にもfabricのcrashlyticsもエラーを吐いており、
両方とも正しく動作していないようです。

E/CrashlyticsCore(13497): java.util.concurrent.ExecutionException: java.lang.NoSuchMethodError: io.fabric.sdk.android.services.common.Crash$FatalException.<init>
E/CrashlyticsCore(13497):     at java.util.concurrent.FutureTask.report(FutureTask.java:94)
E/CrashlyticsCore(13497):     at java.util.concurrent.FutureTask.get(FutureTask.java:174)
E/CrashlyticsCore(13497):     at com.crashlytics.android.core.CrashlyticsExecutorServiceWrapper.executeSyncLoggingException(CrashlyticsExecutorServiceWrapper.java:44)
E/CrashlyticsCore(13497):     at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:251)
E/CrashlyticsCore(13497):     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
E/CrashlyticsCore(13497):     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
E/CrashlyticsCore(13497):     at dalvik.system.NativeStart.main(Native Method)
E/CrashlyticsCore(13497): Caused by: java.lang.NoSuchMethodError: io.fabric.sdk.android.services.common.Crash$FatalException.<init>
E/CrashlyticsCore(13497):     at com.crashlytics.android.core.CrashlyticsCore.recordFatalExceptionEvent(CrashlyticsCore.java:715)
E/CrashlyticsCore(13497):     at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.writeFatal(CrashlyticsUncaughtExceptionHandler.java:808)
E/CrashlyticsCore(13497):     at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.handleUncaughtException(CrashlyticsUncaughtExceptionHandler.java:278)
E/CrashlyticsCore(13497):     at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.access$100(CrashlyticsUncaughtExceptionHandler.java:55)
E/CrashlyticsCore(13497):     at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler$5.call(CrashlyticsUncaughtExceptionHandler.java:254)
E/CrashlyticsCore(13497):     at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler$5.call(CrashlyticsUncaughtExceptionHandler.java:251)
E/CrashlyticsCore(13497):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
E/CrashlyticsCore(13497):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
E/CrashlyticsCore(13497):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
E/CrashlyticsCore(13497):     at io.fabric.sdk.android.services.common.ExecutorUtils$1$1.onRun(ExecutorUtils.java:75)
E/CrashlyticsCore(13497):     at io.fabric.sdk.android.services.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:30)
E/CrashlyticsCore(13497):     at java.lang.Thread.run(Thread.java:856)
E/AndroidRuntime(13497): FATAL EXCEPTION: main
E/AndroidRuntime(13497): java.lang.IllegalAccessError: tried to access method com.twitter.sdk.android.core.TwitterCore.<init>:(Lcom/twitter/sdk/android/core/TwitterAuthConfig;)V from class com.twitter.sdk.android.Twitter
E/AndroidRuntime(13497):     at com.twitter.sdk.android.Twitter.<init>(Twitter.java:65)
E/AndroidRuntime(13497):     at com.sdkbox.plugin.PluginShareTwitterConnector$1.run(PluginShareTwitterConnector.java:77)
E/AndroidRuntime(13497):     at android.os.Handler.handleCallback(Handler.java:725)
E/AndroidRuntime(13497):     at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(13497):     at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(13497):     at android.app.ActivityThread.main(ActivityThread.java:5159)
E/AndroidRuntime(13497):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(13497):     at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(13497):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:810)
E/AndroidRuntime(13497):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:577)
E/AndroidRuntime(13497):     at dalvik.system.NativeStart.main(Native Method)

該当のソースコード

 proj.android-studio/app/build.gradle

buildscript {
  repositories {
    maven { url 'https://maven.fabric.io/public' }
  }

  dependencies {
    classpath 'io.fabric.tools:gradle:1.+'
  }
}

apply plugin: 'com.android.application
apply plugin: 'io.fabric'

repositories {
  maven { url 'https://maven.fabric.io/public' }
}


android {
    compileSdkVersion 23
    buildToolsVersion "24"

    defaultConfig {
        applicationId "com.hogehogehogehoge"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0.0"
        multiDexEnabled true
    }

    dexOptions {
        incremental true
        javaMaxHeapSize "4096M"
        jumboMode = true
        preDexLibraries = false
    }


    sourceSets.main {
        java.srcDir "src"
        res.srcDir "res"
        jniLibs.srcDir "libs"
        manifest.srcFile "AndroidManifest.xml"
        assets.srcDir "assets"
    }
    signingConfigs {
       release {
            if (project.hasProperty("RELEASE_STORE_FILE")) {
                storeFile file(RELEASE_STORE_FILE)
                storePassword RELEASE_STORE_PASSWORD
                keyAlias RELEASE_KEY_ALIAS
                keyPassword RELEASE_KEY_PASSWORD
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            if (project.hasProperty("RELEASE_STORE_FILE")) {
                signingConfig signingConfigs.release
            }
        }
    }
    configurations {
      all*.exclude group: 'com.android.support', module: 'support-annotations'
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':libcocos2dx')  
    compile('com.twitter.sdk.android:twitter:+@aar') { 
      transitive = true; exclude module: 'support-v4' 
    }

    compile ('com.facebook.android:audience-network-sdk:4.15.0'){
      exclude group: 'com.google.android.gms'; 
    }

    compile('com.crashlytics.sdk.android:answers:1.3.10@aar') {
      transitive = true; exclude module: 'fabric'
    }
    compile('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') {
      transitive = true; exclude module: 'fabric'
    }
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.firebase:firebase-ads:10.0.1'
}
apply plugin: 'com.google.gms.google-services'

 その他のbuild.gradleファイル

$ find ./ | grep build.gradle
.//cocos2d/cocos/platform/android/java/libs/gps/build.gradle
.//cocos2d/cocos/platform/android/libcocos2dx/build.gradle
.//cocos2d/cocos/platform/android/libcocos2dx/libs/facebook_lib/build.gradle
.//cocos2d/cocos/platform/android/libcocos2dx-with-controller/build.gradle
.//proj.android-studio/app/build.gradle
.//proj.android-studio/build.gradle

試したこと

  • google-play-services or supportv4周りの重複ライブラリを除去や、バージョン一致
  • fabric(answers/crashlytics)との衝突回避
  • とにかく、関係がありそうなライブラリを消したり足したり。汗
  • sdkbox::PluginShare::init()一度も呼ばずに、sdkbox::PluginShare::share(info);をしても落ちはしない。

補足情報(言語/FW/ツール等のバージョンなど)

  • cocos2d-x version3.14.1
  • mac OSX 10.11.6
  • xcode 8.21
  • 計測&広告周りのSDKが沢山入っています。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

こちら、sdkboxのpluginシェア機能をつかわず、androidの場合のみ、ネイティブなjavaのコードでシェア機能を実装しました。
androidOS6以降のパーミッションチェック等も手間でしたが、無事解決しました。
ご協力ありがとうございました!m( _ _ )m

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る