モバイルバンクの開発中に、かつてこのような問題に遭遇しました。 
      つまり、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'] }