Sobre modificar e relançar o pacote jar do Android

fundo:

Para alguns pacotes jar, existem bugs internos e as soluções são as seguintes:
(1) Modificar sua lógica de atribuição por meio de reflexão
(2) Reescrever seus métodos por meio de herança
(3) Modificar Para o código-fonte do pacote jar, para reparar o problema da raiz
, (1) e (2) são mais adequados para a quantidade de mudança e nível de dificuldade, porém, em alguns casos, as condições de modificação não podem ser atendidas, então existe a opção 3. Caso contrário, basta aguardar o oficial versão do pacote jar a ser atualizada.

ambiente:

(1) win10
(2) jdk11
(3) download da ferramenta de visualização jd (versão jd-gui-1.6.6.jar)

Combate real

Por exemplo, veja aliyun-vod-upload-android-sdk-1.6.5.jar. Entre eles
, classe: AliyunVodAuth, linha 181, há um julgamento de ponteiro nulo que não foi feito, fazendo com que o programa reporte um erro. A mensagem de erro é a seguinte:

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)

Como a localização atual deste pacote já é o pacote jar oficial mais recente, não sabemos quanto tempo levará para esperar pela atualização oficial, portanto, precisamos modificar manualmente o conteúdo do pacote jar.

(1) Extraia arquivos, modifique e salve

O código-fonte real do código de erro é o seguinte:

if (var1x == 1003) {
	AliyunVodAuth.this.vodAuthCallBack.onError(AliyunVodErrorCode.VODERRORCODE_HTTP_ABNORMAL, "http error response unknown.");
 }

Pode-se observar que isso é causado pelo fato de vodAuthCallBack não estar vazio. Porque, durante o nosso processo de modificação, só precisamos adicionar um julgamento nulo.

Determine a classe do relatório de erros. O código fonte é mostrado abaixo:
Insira a descrição da imagem aqui
Em seguida, selecione a classe e clique em Arquivo–Salvar. Salve esta classe localmente. Em seguida, haverá um arquivo java salvo no diretório salvo correspondente e, em seguida, modificará o julgamento no arquivo, conforme mostrado abaixo:
Insira a descrição da imagem aqui
Salvar após modificação

(1) Compilar através de java c para gerar arquivos de classe

Encontre o pacote jar dependente correspondente na classe. Nesta classe, o pacote jar dependente é:
gson.jar, okhttp.jar, portanto, esses dois pacotes são necessários para executar o
diretório executável javac. As dependências são as seguintes:
Insira a descrição da imagem aqui
Em seguida, no janela de comando dos Digite o seguinte comando

As instruções de execução são as seguintes:
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

Entre eles, cp representa os arquivos dependentes envolvidos durante a compilação, que são separados por ";" na janela, enquanto *.java representa todos os arquivos no formato .java no diretório, e uma determinada classe java também pode ser especificada.

Por fim, execute o comando para gerar os seguintes arquivos:
Insira a descrição da imagem aqui
Em seguida, atribua o valor correspondente ao arquivo .class gerado, sobrescreva o arquivo original e você poderá utilizá-lo.

isso é tudo------------------------------------------------ -------------------------------------------------- ----

Acho que você gosta

Origin blog.csdn.net/motosheep/article/details/132150736
Recomendado
Clasificación