Android studio gradle友盟自動更新jarパッケージokio競合
1830 ワード
最近暇なので、最近の2つのプロジェクトで出会った穴をまとめると、まず友盟が自動的に更新します.
友盟集積は自動的にsdkを更新する時、sdk集積をプロジェクトにダウンロードして、その時のプロジェクトの中でOKHttpフレームワークを使って、このフレームワークはまたokioパッケージに依存して、そこで問題は来ました:
まずエラーを報告します:com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-8-oracle/bin/java'' finished with non-zero exit value 2
value 2は一般的に多重参照の問題で、以前も遭遇したことがあるのでgradleにmultiDexEnabled trueを追加しました.
しかし、javaと間違えました.util.zip.ZipException: duplicate entry: com/okio/AsyncTimeOut.class
多くの方法を検索しましたが、最も一般的なのはgradleから削除することです.
だめです.同じ間違いを報告し続けます.
たとえば、
例:
エラーを報告しなくてもapkをインストールできます.okhttpを呼び出すとcrashになります.okhttpにはokioの方法が見つからないからです.
これらの原因は友盟がokioのパッケージをjarパッケージに入れ、私のプロジェクトでもokioをコンパイルしなければならないので、多重参照(multi-dex)しました.
最終的な解決策は、wireを持たない友盟自動更新sdkを再ダウンロードすることです.デフォルトのバージョンはwire付きで、プロジェクトに統合された後、順調にgradle-build-runになりましたが、自動更新の通知を受け取っていません.コールバックを加えると、コールバックが戻ってこないことがわかりました.その時、logはどの方法が見つからなかったようですか(具体的には忘れました.)公式のsampleを見てwire-runtime-1.7.0に加入しました.jarというjarパッケージ、つまりsdkはwireバージョンを持たないが、手動でwireパッケージに依存しなければならない.このjarパッケージに加入してから、やっとすべてが正常になった......
以上が心塞ぎの解決過程であり、まとめてみると:
1.友盟自動更新wireバージョンを持たないsdkをダウンロードする
2.wire-runtime jarパッケージの追加
3.gradleにmultiDexEnabled trueを追加
突っ込みますと、友盟の各種sdkはよく他のバッグと衝突して、jarバッグの中で第三者のcode連バッグのコードを直接入れて、このようにまるで開発者に無数の穴を埋めます
友盟集積は自動的にsdkを更新する時、sdk集積をプロジェクトにダウンロードして、その時のプロジェクトの中でOKHttpフレームワークを使って、このフレームワークはまたokioパッケージに依存して、そこで問題は来ました:
まずエラーを報告します:com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-8-oracle/bin/java'' finished with non-zero exit value 2
value 2は一般的に多重参照の問題で、以前も遭遇したことがあるのでgradleにmultiDexEnabled trueを追加しました.
しかし、javaと間違えました.util.zip.ZipException: duplicate entry: com/okio/AsyncTimeOut.class
多くの方法を検索しましたが、最も一般的なのはgradleから削除することです.
compile 'com.squareup.okio:okio:1.5.0'
だめです.同じ間違いを報告し続けます.
たとえば、
packagingOptions {
exclude 'META-INF/maven/com.squareup.okio/okio/pom.xml'
exclude 'META-INF/maven/com.squareup.okio/okio/pom.properties'
}
だめです.やはり間違っています.例:
android {
configurations{
all*.exclude module: 'com.squareup.okio',module:"okio"
}
}
エラーを報告しなくてもapkをインストールできます.okhttpを呼び出すとcrashになります.okhttpにはokioの方法が見つからないからです.
これらの原因は友盟がokioのパッケージをjarパッケージに入れ、私のプロジェクトでもokioをコンパイルしなければならないので、多重参照(multi-dex)しました.
最終的な解決策は、wireを持たない友盟自動更新sdkを再ダウンロードすることです.デフォルトのバージョンはwire付きで、プロジェクトに統合された後、順調にgradle-build-runになりましたが、自動更新の通知を受け取っていません.コールバックを加えると、コールバックが戻ってこないことがわかりました.その時、logはどの方法が見つからなかったようですか(具体的には忘れました.)公式のsampleを見てwire-runtime-1.7.0に加入しました.jarというjarパッケージ、つまりsdkはwireバージョンを持たないが、手動でwireパッケージに依存しなければならない.このjarパッケージに加入してから、やっとすべてが正常になった......
以上が心塞ぎの解決過程であり、まとめてみると:
1.友盟自動更新wireバージョンを持たないsdkをダウンロードする
2.wire-runtime jarパッケージの追加
3.gradleにmultiDexEnabled trueを追加
突っ込みますと、友盟の各種sdkはよく他のバッグと衝突して、jarバッグの中で第三者のcode連バッグのコードを直接入れて、このようにまるで開発者に無数の穴を埋めます