arrière-plan:
Pour certains packages jar, il existe des bugs internes, et les solutions sont les suivantes :
(1) Modifier sa logique d'affectation par réflexion
(2) Réécrire ses méthodes par héritage
(3) Modifier Pour le code source du package jar, pour réparer le problème de la racine
, (1) et (2) sont plus adaptés au niveau de modification et au niveau de difficulté. Cependant, dans certains cas, les conditions de modification ne peuvent pas être remplies, il existe donc l'option 3. Sinon, attendez simplement le officiel version du package jar à mettre à jour.
environnement:
(1) win10
(2) jdk11 (3) téléchargement
de l'outil de visualisation jd (version jd-gui-1.6.6.jar)
Combat réel
Par exemple, prenez aliyun-vod-upload-android-sdk-1.6.5.jar. Parmi eux
, classe : AliyunVodAuth, ligne 181, il y a un jugement de pointeur nul qui n'est pas effectué, ce qui amène le programme à signaler une erreur. Le message d'erreur est le suivant :
com.alibaba.sdk.android.vod.upload.auth.AliyunVodAuth$2$1.onFailure(AliyunVodAuth.java:181)
com.aliyun.vod.qupaiokhttp.OkHttpTask.onPostExecute(OkHttpTask.java:279)
com.aliyun.vod.qupaiokhttp.OkHttpTask$2.run(OkHttpTask.java:228)
android.os.Handler.handleCallback(Handler.java:942)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loopOnce(Looper.java:211)
android.os.Looper.loop(Looper.java:300)
android.app.ActivityThread.main(ActivityThread.java:8152)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028)
Étant donné que l'emplacement actuel de ce package est déjà le dernier package jar officiel, nous ne savons pas combien de temps il faudra attendre la mise à jour officielle. Par conséquent, nous devons modifier manuellement le contenu du package jar.
(1) Extraire les fichiers, les modifier et les enregistrer
Le code source réel du code d'erreur est le suivant :
if (var1x == 1003) {
AliyunVodAuth.this.vodAuthCallBack.onError(AliyunVodErrorCode.VODERRORCODE_HTTP_ABNORMAL, "http error response unknown.");
}
On peut voir que cela est dû au fait que vodAuthCallBack n'est pas vide. Car, lors de notre processus de modification, il suffit d'ajouter un jugement nul.
Déterminez la classe du rapport d'erreurs. Le code source est comme indiqué ci-dessous :
Sélectionnez ensuite la classe et cliquez sur FIle–Save. Enregistrez cette classe localement. Ensuite, il y aura un fichier Java enregistré dans le répertoire enregistré correspondant, puis modifiera le jugement dans le fichier, comme indiqué ci-dessous :
Enregistrer après modification
(1) Compiler via Java C pour générer des fichiers de classe
Recherchez le package jar dépendant correspondant dans la classe. Dans cette classe, le package jar dépendant est :
gson.jar, okhttp.jar, ces deux packages sont donc nécessaires pour exécuter le
répertoire exécutable javac. Les dépendances sont les suivantes :
Ensuite, dans le fenêtre de commande dos Entrez la commande suivante
Les instructions d'exécution sont les suivantes :
javac -cp aliyun-vod-upload-android-sdk-1.6.5.jar;E:\Android\sdk\platforms\android-30\android.jar;okhttp-4.5.0.jar ;gson- 2.10.1.jar *.java
Parmi eux, cp représente les fichiers dépendants impliqués lors de la compilation, qui sont séparés par ";" dans la fenêtre, tandis que *.java représente tous les fichiers au format .java du répertoire, et une certaine classe Java peut également être spécifiée.
Enfin, exécutez la commande pour générer les fichiers suivants :
Ensuite, attribuez la valeur correspondant au fichier .class généré, écrasez le fichier d'origine et vous pourrez l'utiliser.
c'est tout------------------------------------------------ -------------------------------------------------- ----