Android開発-Gradle JarJarプラグイン

モバイルバンクの開発中に、かつてこのような問題に遭遇しました。

つまり、GSONライブラリを使用して、ランタイム中に一部のHTCデバイスでJSONをシリアライズ/デシリアライズすると、クラッシュしました。 この動作の理由は、一部のHTCデバイスのファームウェアにGSONの独自のバージョンがあり、これはプロジェクトで使用したものよりも古いためです。 そして、Android Javaクラスローダーは、クラスをメモリにロードするときに、プロジェクト内のバージョンではなく「システム」バージョンを優先します。

さらに、一部のデバイスでは、Android開発の世界でかなり人気のあるライブラリであるOkHttpにも同様の問題があります。

この問題を解決するには、 JarJarユーティリティを使用してGSON (またはその他のライブラリ)を再パッケージ化する必要があります。 再パッケージ後、アーティファクトは新しいパッケージ構造になります。これは、プロジェクトのインポートディレクティブで使用する必要があります。 これを行うには、元のパッケージではなく、再パッケージ化されたjarをプロジェクトに接続する必要があります。

このタスクを自動化したいと思った結果、 Maven Centralで利用可能なGradle JarJarプラグインが登場しました 。 このプラグインを使用すると、JarJarを使用してjarライブラリとそれらを再パッケージ化するためのルールを指定できます。



プラグインをスクリプトの依存関係に追加します。

buildscript { repositories { jcenter() } dependencies { classpath 'ru.tinkoff.gradle:jarjar:1.1.0' } } 

プロジェクトモジュールで接続します。

 apply plugin: 'ru.tinkoff.gradle.jarjar' 

再パッケージ用の成果物のリストを指定します。

 dependencies { //     JarJar jarJar 'com.google.code.gson:gson:2.3' //      build/libs,    classpath  compile fileTree(dir: './build/libs', include: ['*.jar']) } 

カスタマイズ:

 jarJar { //   - jarJar.jar    jar :) jarJarDependency 'com.googlecode.jarjar:jarjar:1.3' //   //   -  ,    jarJar  dependencies  //  -   JarJar rules = ['gson-2.3.jar': 'com.google.gson.** ru.tinkoff.core.gson.@1'] } 

Source: https://habr.com/ru/post/J260707/


All Articles