私はdexの制限が65K、 のように見えます。古いメソッドを削除すると、デクスエラーが発生しました。あなたがAndroidスタジオに持っているメソッドの数を確認してください
Androidスタジオで現在使用しているメソッドの数を確認する方法はありますか?
私はdexの制限が65K、 のように見えます。古いメソッドを削除すると、デクスエラーが発生しました。あなたがAndroidスタジオに持っているメソッドの数を確認してください
Androidスタジオで現在使用しているメソッドの数を確認する方法はありますか?
私はそれを行う壊れやすい方法を見つけることができます。これはまったく良い方法ではないかもしれません。コピーしてandroid
ブロックのbuildToolsVersion
仕様で指定されたものと同じバージョンであなたのAndroid SDKのインストールとBUILD_TOOLS_VERSION
のパスでANDROID_HOME
を交換し、あなたのモジュールのbuild.gradleファイルの最後に次を貼り付けます。
buildscript {
dependencies {
classpath files("/Users/sbarta/sdk/build-tools/21.0.2/lib/dx.jar")
}
}
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
variant.assemble.doLast {
// Show the dex count after the assemble task is finished
showDexCount(
[filename: output.outputFile],
)
}
}
}
def showDexCount(Map... files) {
def maxReferences = (int) Math.pow(2, 16);
def buffer = 5000 // that's for safety, because you can't burn maxReferences
println "\n\n***********************************************************************************"
println "* DEX COUNTS *"
println "***********************************************************************************"
files.each {
def dex = new com.android.dex.Dex(it.filename)
def count = dex.tableOfContents.methodIds.size
if ((maxReferences - count - buffer) >= 0)
println String.format('* %1$5d (there are still %2$5d references to burn...) *',
count, maxReferences - count - buffer)
else
println String.format('* %1$5d !!!WARNING!!! Too many references, please decrease by %2$4d! *',
count, -(maxReferences - count - buffer))
}
println "***********************************************************************************\n"
}
を
これは、dexコードをロードしてdexファイルを評価し、メソッドの数を数えます。ビルドスクリプトのassemble
タスクの最後に作業を追加するので、コマンドラインビルドやAndroidスタジオからGradleコンソールに表示されます(実際にはGradleコンソールに表示されます)。
パスをハードコードする代わりに、ANDROID_HOME環境変数を使用するようにしましたが、Android Studioからビルドするときに環境変数を使用すると問題があります(コマンドラインからは問題ありません)。同様に、ビルド・ツール・バージョンでビルド・スクリプトの別の場所からビルド・ツール・バージョンを取得しようとしましたが、グローバル・定数を定義しようとしましたが、実行の有効範囲と順序はできませんでした。誰かがこれで改善できる場合は、コメントを書き留めてください。
これはCarlos Sobrinhoによって書かれたものから適合しています。私は元のWebへのアクセス可能な参照を見つけることができません。
便利、ありがとうございます。ビルドスクリプトのクラスパスが認識できるように、mxnでdx.jarファイルをローカルにインストールしなければなりませんでした。またメモとして、ライブラリ上でこれを必要とする場合は、android.testVariantsにandroid.applicationVariantsを変更して、テストapkのdexで実行するようにしてください。 – JCricket
私はこれを使用しようとしていますが、「クラスcom.android.dex.Dexを解決できません」と言われています...誰かが私を助けたり案内したりしますか?前もって感謝します。 –
https://plus.google.com/+JahirFiquitivaJDev/posts/8VXJzyLUiYsここでJahirのトピックが見つかりました – Phuong
私は、多くの方法を見つけるために、2つの異なるツールを使用し:メソッドをカウントし、異なるパッケージでメソッドの量を示し
1)シンプルなツール: https://github.com/mihaip/dex-method-counts
それはあなたにこのような単純なデータが表示されます:
Read in 65490 method IDs.
<root>: 65490
: 3
android: 6837
accessibilityservice: 6
bluetooth: 2
content: 248
pm: 22
res: 45
...
com: 53881
adjust: 283
sdk: 283
codebutler: 65
android_websockets: 65
...
Overall method count: 65490
2)そして、ここでは、より使いやすくなりまし別のツールで、あなたのプロジェクトに依存関係を追加する必要があり、それはあなたに各ビルドのメソッドが表示されます。あなたがそれを必要としていないときは、単純にこの依存関係行をコメントすることができます https://github.com/KeepSafe/dexcount-gradle-plugin
methods fields package/class name
5037 1103 android.support.v4
29 1 android.support.v4.accessibilityservice
57 16 android.support.v4.animation
をhttps://developer.android.com/studio/build/apk-analyzer.html#view_dex_files
APKアナライザのDEXファイルビューアは、あなたの中にDEXファイル(複数可)での基本的な情報への即時アクセスを提供しますアプリ。ビューアにはクラス、パッケージ、総参照数、宣言数が用意されています。マルチDEXを使用するかどうかの判断や、64K DEXの制限を下回るように依存関係を削除する方法を決定できます。
図4は、64k DEXの限界に近い中サイズのアプリを示しています。
あなたのプロジェクトで使用されている各依存関係のメソッド数をAndroidスタジオプラグインで確認できます。回答を確認してください。http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies/36056607#36056607 – darwin
よく依存関係に含まれるメソッドの数を把握する方法はありますか? – CoDe