blog

org.apache.commons.codec.binary.Hex ClassNotFoundException」の解決と原因究明のために、Android 10で「org.apache.commons.codec.binary.

10.0のテスト機では問題がありましたが、6.0のテスト機では問題がありませんでした。 検証の結果、出力は10.0の携帯電話では失敗、6.0の携帯電話では成功でした。 プロジェクトのコードをグローバル...

Dec 30, 2020 · 3 min. read
シェア

java.lang.NoClassDefFoundErrorの解決に失敗した。: Lcom/apache/commons/desc/binary/Hexバージョンアップを繰り返した後、突然いくつかのモデルでクラッシュが発生しました:

10.0のテスト機では問題がありましたが、6.0のテスト機では問題ありませんでした。

問題の特定と解決

org.apache.commons.codec.binary.Hex異なるモデルの上記のパフォーマンスに基づいて、クラスのロードを検証するコードを使用して、検証コードは次のとおりです:

try {
 Class.forName("org.apache.commons.codec.binary.Hex");
 Log.e("HexTest","success");
} catch (ClassNotFoundException e) {
 e.printStackTrace();
 Log.e("HexTest","failed");
}

10.0の携帯電話ではFALIED、6.0の携帯電話ではSUCCESSが出力されることが確認されています。

org.apache.commons.codec.binary.Hexこのクラスは実際に何をするのですか?どのパッケージの下にあるのですか?org.apache.commons.codec.binary.Hexプロジェクトのコードをグローバルに検索しましたが、見つかりませんでした。

まず問題を解決するために、Apache Commons Codecある適切なjarパッケージを見つけて、以下の方法でプロジェクトに依存関係を追加しました:

 compile group: 'commons-codec', name: 'commons-codec', version: '1.14'

とりあえず問題解決。

問題の原因分析

次に、この問題の原因を分析するために、問題の核心は、6.0携帯電話は、このクラスにロードすることができ、10.0携帯電話をロードすることはできません、最初の推測は、携帯電話のシステムは、このクラスを内蔵し、携帯電話の上位バージョンは、非表示にするには、このクラスにデフォルト。

その後、この反復のコードの詳細な調査の後、可能な原因を発見した、つまり、コンパイルされたバージョンcompileSdkVersionにアップグレードしてから、compileSdkVersionに戻って、この問題は本当になくなっています。

api 28はAndroid 9に対応しています。詳細はAndroidのバージョン履歴をご覧ください。

さて、問題はcompileSdkVersionが27から28になったことと、このapacheパッケージのHIDEアップにどんな関係があるのでしょうか?

ふと、Android 6.0からApache HTTPクライアントのサポートがなくなったことを思い出したのですが、これもapacheのパッケージなのですが、何か関係があるのでしょうか?公式サイトを見てみると、このように説明されています:

Apache HTTP クライアントの非推奨
Android 6では.0 Apache HTTPクライアントのサポートがAndroid 9から削除された。Android 9から、このコンテンツ・ライブラリはブートクラスパスから削除され、デフォルトではアプリで利用できない。

org.apache.http.legacyのjarパッケージを見つけて、以下のように分析します:

AndroidManifest.xmlに以下を追加するだけです:

<uses-library
 android:name="org.apache.http.legacy"
 android:required="false" />

もちろん、別の方法もあります。モジュールのbuild.gradleに以下のコードを追加するだけです:

android { 
 useLibrary 'org.apache.http.legacy'
}

org.apache.http.legacysdk/platforms/android-xx/options/各バージョンのAndroid sdkには、以下のようにパスの下にあるjarパッケージがあります:

org.apache.commons.codec.binary.Hexorg.apache.commons.codec.binary.Base64org.apache.http.legacyこれまでのところ、問題の原因は、Androidはjarパッケージがそれらを含んで付属しているため、通常、クラスまたはこれらのクラスを参照することができます考え出した。あなたのプロジェクトのcompileSdkVersionはapi 28以上である場合は、この問題に注意を払う必要があります。

Read next

expressがルートを分割する

express-generatorがない場合、ルートの分割は必要であり、構造はより明確になります プロジェクト構造は唯一の標準ではなく、チームごとに独自のスタイルがあります プロジェクトのメインエントランスのルートパスindex.js 基本的に、この作品のメインエントランスは

Dec 30, 2020 · 3 min read