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'] }
      
      






All Articles