Androidミニ講座

Android 64k問題を回避するための設定方法(Cannot fit requested classes in a single dex file / Too many field references)

投稿日:

 

Androidアプリは、ビルドシステムの都合により、メソッド数が65536(64k=64☓1024)を超えるとビルドできないという制約があり、「64k問題」と呼ばれたりしています。

 

ですので、メソッド数が65536を超えるアプリをビルドすると、

こんなエラーとか

こんなエラーが出て、ビルドが止まってしまいます。

 

この「65536」という数字は、自分が作ったメソッドだけではなくて、Androidのフレームワークや使っている外部のライブラリとかを全部含むので、意外と超える可能性のある数字です。

Android アプリ(APK)ファイルには、Dalvik Executable(DEX)形式の実行可能なバイトコード ファイルが含まれており、その中にアプリの実行に使用されるコンパイル済みのコードがあります。Dalvik Executable の仕様により、単一の DEX ファイル内で参照できるメソッドの総数が 65,536 に制限されます。これらのメソッドには、Android フレームワーク メソッド、ライブラリ メソッド、独自のコードのメソッドが含まれます。コンピュータ サイエンスにおいては、Kilo、K は 1024(または、2^10)を表します。65,536 は 64 X 1024 に等しいため、この制限は「64K 参照制限」と呼ばれます。

 

もちろん、ライブラリの見直しなどを行って、メソッド数を減らすという手段を取るのが常道ではありますが、メソッド数が65536を超えてもビルドを回せるように予め設定しておきたい場合の対処法の説明です。

(最初から複数のdexファイルが使えるように設定をしておくということです)

 

1.モジュール レベル(アプリケーションレベル)の build.gradle ファイルで multiDexEnabled を trueに

 

2.minSdkVersion を 20 以下に設定している場合は、Multidex サポート ライブラリを依存関係に追加

 

3.MultiDexの初期化

1.Applicationクラスを継承したクラスを使っていない場合

アプリ内でApplicationクラスを継承したクラスを使っていない場合は、マニフェストファイルの<application>タグ内に、以下の編集を行います(最初に起動するクラスをMultiDexApplicationクラスにする)

 

2.Applicationクラスを継承したクラスを使っている場合

Java/Kotlinではクラスの継承は1つしかできないので、自作ApplicationクラスのattachBaseContext()メソッド内で、Multidexを有効にする

 

これで、最初から複数のdexファイルが使えるように設定できたので、メソッド数が65536を超えても、ビルドがちゃんと回ってくれるようになります。

(上の動画で詳しく説明していますので、よろしければご覧ください)

みんプロへのお問い合わせはこちらよりお気軽にお寄せ下さい

みんプロへのお問い合わせはこちらよりお気軽にお寄せ下さい

「みんなのプログラミング  by Telulu LLC(みんプロ)」について

会社概要

みんプロ最新トピックス

かなり長い代表者プロフィール

みんプロにかける想い

みんプロに頂いたお客様の声

サービス・料金体系

作成アプリ実績

みんプロ公式Facebook

みんプロ公式LINE@(登録者限定無料小冊子プレゼント!)

公式ブログで随時情報発信中!!

きーぼーのつぶやき

用語

Android

  • この記事を書いた人
北川 博之 (みんなのプログラミング by Telulu LLC 代表)

北川 博之(みんなのプログラミング by Telulu LLC 代表)

大阪府生まれ。京都大学経済学部経済学科卒業。 2000年より、日本生命保険、ニッセイアセットマネジメント、パトナム・インベストメンツ(米国)で、日本株トレーダー・アナリスト、経営企画、システム開発等の業務に従事。主に日本株の売買執行・投資分析、経営計画の策定、海外投資家向け日本株営業、社内トレーディングシステム及び経理システムの開発等を行う。 2016年、合同会社てるる設立。スマホアプリプログラマーとして「新感覚脳トレアプリ・記憶戦隊オボエルンジャー」「ご当地的鉄道アプリ・関西鉄道駅検定(京阪神編)」をはじめとした、子供向け知育アプリを中心にAndroid・iOSアプリをリリース。 2017年、自身のこれまでの社会人経験・プログラミング経験・子育て経験をを基に、プログラミングを通じて人々の人生を豊かにして、未来に希望の持てる明るい社会の実現に貢献したいとの想いから、ビギナー向けプログラミングひろば「みんなのプログラミング by Telulu LLC」を設立し、プログラミングサポーター活動と心理カウンセリング活動を開始。3児の父。 かなり長めのプロフィールをこちらから https://minpro.net/profile-of-ceo

-Androidミニ講座

Copyright© みんプロ式・初心者向けAndroidスマホアプリ専門プログラミング講座/教室/スクール/塾-大阪府高槻市 , 2018 All Rights Reserved.