2016-11-08 13 views
0

私たちはアンドロイドサポートライブラリv4に依存して、Javaを使用してアンドロイドライブラリ(aar)を開発しました。実際には、ViewPagerandroid.support.v4.view.ViewPager)クラスを拡張し、ライブラリのGUIでそれを使いました。Androidでマルチデックスを防ぐ方法

私たちはライブラリにproguardを適用しており、テストアプリでうまく動作しますが、私たちはネイティブC++でアンドロイドアプリを開発しており、コンポーネントをアプリに統合しようとしています。ビルド。

ビルド時にcom.android.dex.DexIndexOverflowExceptionを受信します。これは、1つのdexで許可されているほぼ64Kの方法以上の兆候です。

彼らはビルド設定にコンポーネントの依存関係を含める必要があるため、より少ないか小さい依存関係を使用するように頼んだので、アンドロイドのサポートソースからViewPagerを抽出してコンポーネントのソースコードに入れなければなりません。

は今の質問は、私たちは、AndroidのソースのうちのViewPagerを抽出し、当社 ライブラリのソースコードに追加する場合、それは上記の例外を防ぐ にメソッドの量を減らします

  1. ですか?それは良い習慣ですか?
  2. この問題を解決する最善の方法は何ですか?

おかげ

答えて

3

我々はアンドロイドのソースのうちのViewPagerを抽出し、私たちのライブラリのソースコードに追加する場合、それは上記の例外を防ぐために、メソッドの量を減らすのだろうか?

おそらく、少なくともreleaseビルドではありません。お客様はProGuardを設定しておく必要があります。ProGuardは、ライブラリを介して取り込まれた不要なコードを特定して削除します。

これを行うのは良い方法ですか?

いいえ、あなたの顧客はそれよりよく知っている必要があります。

この問題を解決するにはどうすればよいですか?

ほとんどの場合、あなたの問題ではありません。それはあなたの顧客の問題です。あなたの顧客はあなたを責めていますが、お客様のライブラリがお客様のDEXメソッド参照の重要なソースであるという証拠はありません。

あなたの顧客はProGuardを設定する必要があり、お客様のメソッド参照がどこから来たのかを確認するには、Androidスタジオ2.2以降のAPKアナライザーを使用する必要があります。

あなたは、あなたのライブラリーでは、可能性:

  • support-v4よりも、より集中の依存関係を使用してみてください。 ViewPager自体はsupport-core-ui人工物に含まれています。ただしFragmentPagerAdapterまたはFragmentStatePagerAdapterを使用している場合はsupport-fragment(これらのクラスのv4エディションを使用している場合)またはsupport-v13v13エディションを使用している場合)のいずれかが必要です。

  • ライブラリーを使用する作成するデモプロジェクトでAPKアナライザーを使用することで、ライブラリーが使用するDEXメソッド参照の数を確認して、実際にそのような参照の重要なソースであるかどうかを確認できます。

  • あなたの顧客の必要なクラスを維持し、ProGuardを効果的にそのアプリケーションで使用できるようにするためのProGuardの設定を提案してください。

0

あなたはこのようなあなたのbuild.gradleファイルにjumboModeを設定することができます。

dexOptions { 
    jumboMode true 
} 

このオプションでは、あなたの.dexファイル内32itワイド文字列の参照を持つことができるようになります。したがって、2^32の参照文字列をプロジェクトに含めることができます。

希望します。

+0

これはどのようにOPの質問に答えますか?あなたはそれを一読しましたか? –

0

利用可能なオプションは次のとおりです。

  1. はい、あなたはサポートライブラリからViewPagerを抽出することができます。 ViewPagerサポートライブラリからいくつかのファイルもインポートする必要があります。これによりメソッドの数が大幅に減少します。
  2. build.gradleファイルの依存関係でexcludeパラメータを使用することもできます。
 
    compile ('com.android.support:recyclerview-v7:+') { 
     exclude module: 'support-v4' 
    } 
関連する問題