問題は次のとおりです。
問題はコード内のこの文を指します
publishBus = new SerializedSubject<>(PublishSubject.<Event>create());
この問題は奇妙です。コンパイルして正常に渡すことはできますが、実行するとアプリがクラッシュします。最初に問題の解決策について話してから、原理を説明します。
build.gradle を変更します。
defaultConfig { ... multiDexEnabled true } ... dependencies { compile 'com.android.support:multidex:1.0.1' ... }
CustomApplication onCreate() に MultiDex.install(getBaseContext()) を追加するか、アプリケーション クラスが MultiDexApplication を拡張します。
public class CustomApplication extends Application { ... @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(base); } ...
設定メソッドの数は、Dalvik 実行可能サブパッケージの設定アプリケーションあたり 64K を超えています。魔法の
Android65536 -
Android アプリケーション (APK) ファイルには、アプリのコンパイル済みコードを含む Dalvik 実行可能 (DEX) ファイルの形式で実行可能バイトコード ファイルが含まれています。Dalvik Executable 仕様では、Android フレームワーク メソッド、ライブラリ メソッド、独自のコード内のメソッドを含め、単一の DEX ファイル内で参照できるメソッドの総数が 65,536 に制限されています。コンピューター サイエンスでは、キロ (略して K) という用語は 1024 (または 2^10) を意味します。65,536 は 64 X 1024 に等しいため、この制限は「64K 参照制限」とも呼ばれます。具体的な説明: https://developer.android.com/studio/build/multidex.html#about