diff --git a/README.md b/README.md index 0072fa8c1..17bde1b1a 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ ## Tinker [![license](http://img.shields.io/badge/license-BSD3-brightgreen.svg?style=flat)](https://github.com/Tencent/tinker/blob/master/LICENSE) -[![Release Version](https://img.shields.io/badge/release-1.9.14.27-red.svg)](https://github.com/Tencent/tinker/releases) +[![Release Version](https://img.shields.io/badge/release-1.9.15.1-red.svg)](https://github.com/Tencent/tinker/releases) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/Tencent/tinker/pulls) -[![WeChat Approved](https://img.shields.io/badge/Wechat_Approved-1.9.14.27-red.svg)](https://github.com/Tencent/tinker/wiki) +[![WeChat Approved](https://img.shields.io/badge/Wechat_Approved-1.9.15.1-red.svg)](https://github.com/Tencent/tinker/wiki) [中文说明](https://github.com/Tencent/tinker/wiki) diff --git a/build.gradle b/build.gradle index 3378730d6..16936d181 100644 --- a/build.gradle +++ b/build.gradle @@ -3,13 +3,12 @@ buildscript { repositories { mavenLocal() mavenCentral() + gradlePluginPortal() google() - jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.2.0' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6' - classpath "com.github.jengelman.gradle.plugins:shadow:4.0.4" + classpath "com.github.johnrengelman.shadow:com.github.johnrengelman.shadow.gradle.plugin:4.0.4" } } @@ -17,8 +16,8 @@ allprojects { repositories { mavenLocal() mavenCentral() + gradlePluginPortal() google() - jcenter() } tasks.withType(Javadoc).all { diff --git a/tinker-build/tinker-patch-lib/build.gradle b/tinker-build/tinker-patch-lib/build.gradle index 26788a813..12c40822d 100644 --- a/tinker-build/tinker-patch-lib/build.gradle +++ b/tinker-build/tinker-patch-lib/build.gradle @@ -14,10 +14,8 @@ dependencies { api group: 'com.tencent.mm', name: 'apk-parser-lib', version: '1.2.3' implementation group: 'com.google.guava', name: 'guava', version: '14.0.1' implementation group: 'org.ow2.asm', name: 'asm', version: '6.0' - implementation (group: 'org.smali', name: 'dexlib2', version: '2.3.1') { - exclude group: 'com.google.guava' - } implementation group: 'dom4j', name: 'dom4j', version: '1.6.1' + implementation group: 'com.android.tools.smali', name: 'smali-dexlib2', version: '3.0.9' } sourceSets { diff --git a/tinker-build/tinker-patch-lib/src/main/java/org/jf/dexlib2/builder/BuilderMutableMethodImplementation.java b/tinker-build/tinker-patch-lib/src/main/java/com/android/tools/smali/dexlib2/builder/BuilderMutableMethodImplementation.java similarity index 87% rename from tinker-build/tinker-patch-lib/src/main/java/org/jf/dexlib2/builder/BuilderMutableMethodImplementation.java rename to tinker-build/tinker-patch-lib/src/main/java/com/android/tools/smali/dexlib2/builder/BuilderMutableMethodImplementation.java index ef61c8dfa..a2fac7c7c 100644 --- a/tinker-build/tinker-patch-lib/src/main/java/org/jf/dexlib2/builder/BuilderMutableMethodImplementation.java +++ b/tinker-build/tinker-patch-lib/src/main/java/com/android/tools/smali/dexlib2/builder/BuilderMutableMethodImplementation.java @@ -39,97 +39,96 @@ * what {@link org.jf.dexlib2.builder.MutableMethodImplementation} would do. */ -package org.jf.dexlib2.builder; - +package com.android.tools.smali.dexlib2.builder; + +import com.android.tools.smali.dexlib2.DebugItemType; +import com.android.tools.smali.dexlib2.Opcode; +import com.android.tools.smali.dexlib2.builder.debug.BuilderEndLocal; +import com.android.tools.smali.dexlib2.builder.debug.BuilderEpilogueBegin; +import com.android.tools.smali.dexlib2.builder.debug.BuilderLineNumber; +import com.android.tools.smali.dexlib2.builder.debug.BuilderPrologueEnd; +import com.android.tools.smali.dexlib2.builder.debug.BuilderRestartLocal; +import com.android.tools.smali.dexlib2.builder.debug.BuilderSetSourceFile; +import com.android.tools.smali.dexlib2.builder.debug.BuilderStartLocal; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderArrayPayload; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction10t; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction10x; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction11n; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction11x; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction12x; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction20bc; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction20t; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21ih; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21lh; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21s; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21t; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22b; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22c; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22s; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22t; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22x; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction23x; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction30t; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction31c; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction31i; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction31t; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction32x; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction35c; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction3rc; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction51l; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderPackedSwitchPayload; +import com.android.tools.smali.dexlib2.builder.instruction.BuilderSparseSwitchPayload; +import com.android.tools.smali.dexlib2.iface.ExceptionHandler; +import com.android.tools.smali.dexlib2.iface.MethodImplementation; +import com.android.tools.smali.dexlib2.iface.TryBlock; +import com.android.tools.smali.dexlib2.iface.debug.DebugItem; +import com.android.tools.smali.dexlib2.iface.debug.EndLocal; +import com.android.tools.smali.dexlib2.iface.debug.LineNumber; +import com.android.tools.smali.dexlib2.iface.debug.RestartLocal; +import com.android.tools.smali.dexlib2.iface.debug.SetSourceFile; +import com.android.tools.smali.dexlib2.iface.debug.StartLocal; +import com.android.tools.smali.dexlib2.iface.instruction.Instruction; +import com.android.tools.smali.dexlib2.iface.instruction.SwitchElement; +import com.android.tools.smali.dexlib2.iface.instruction.formats.ArrayPayload; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction10t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction10x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction11n; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction11x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction12x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction20bc; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction20t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21ih; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21lh; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21s; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22b; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22c; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22s; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction23x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction30t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31c; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31i; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31t; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction32x; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction3rc; +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction51l; +import com.android.tools.smali.dexlib2.iface.instruction.formats.PackedSwitchPayload; +import com.android.tools.smali.dexlib2.iface.instruction.formats.SparseSwitchPayload; +import com.android.tools.smali.dexlib2.iface.reference.Reference; +import com.android.tools.smali.dexlib2.iface.reference.StringReference; +import com.android.tools.smali.dexlib2.iface.reference.TypeReference; +import com.android.tools.smali.dexlib2.writer.builder.DexBuilder; +import com.android.tools.smali.util.ExceptionWithContext; import com.google.common.base.Function; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import org.jf.dexlib2.DebugItemType; -import org.jf.dexlib2.Opcode; -import org.jf.dexlib2.builder.debug.BuilderEndLocal; -import org.jf.dexlib2.builder.debug.BuilderEpilogueBegin; -import org.jf.dexlib2.builder.debug.BuilderLineNumber; -import org.jf.dexlib2.builder.debug.BuilderPrologueEnd; -import org.jf.dexlib2.builder.debug.BuilderRestartLocal; -import org.jf.dexlib2.builder.debug.BuilderSetSourceFile; -import org.jf.dexlib2.builder.debug.BuilderStartLocal; -import org.jf.dexlib2.builder.instruction.BuilderArrayPayload; -import org.jf.dexlib2.builder.instruction.BuilderInstruction10t; -import org.jf.dexlib2.builder.instruction.BuilderInstruction10x; -import org.jf.dexlib2.builder.instruction.BuilderInstruction11n; -import org.jf.dexlib2.builder.instruction.BuilderInstruction11x; -import org.jf.dexlib2.builder.instruction.BuilderInstruction12x; -import org.jf.dexlib2.builder.instruction.BuilderInstruction20bc; -import org.jf.dexlib2.builder.instruction.BuilderInstruction20t; -import org.jf.dexlib2.builder.instruction.BuilderInstruction21c; -import org.jf.dexlib2.builder.instruction.BuilderInstruction21ih; -import org.jf.dexlib2.builder.instruction.BuilderInstruction21lh; -import org.jf.dexlib2.builder.instruction.BuilderInstruction21s; -import org.jf.dexlib2.builder.instruction.BuilderInstruction21t; -import org.jf.dexlib2.builder.instruction.BuilderInstruction22b; -import org.jf.dexlib2.builder.instruction.BuilderInstruction22c; -import org.jf.dexlib2.builder.instruction.BuilderInstruction22s; -import org.jf.dexlib2.builder.instruction.BuilderInstruction22t; -import org.jf.dexlib2.builder.instruction.BuilderInstruction22x; -import org.jf.dexlib2.builder.instruction.BuilderInstruction23x; -import org.jf.dexlib2.builder.instruction.BuilderInstruction30t; -import org.jf.dexlib2.builder.instruction.BuilderInstruction31c; -import org.jf.dexlib2.builder.instruction.BuilderInstruction31i; -import org.jf.dexlib2.builder.instruction.BuilderInstruction31t; -import org.jf.dexlib2.builder.instruction.BuilderInstruction32x; -import org.jf.dexlib2.builder.instruction.BuilderInstruction35c; -import org.jf.dexlib2.builder.instruction.BuilderInstruction3rc; -import org.jf.dexlib2.builder.instruction.BuilderInstruction51l; -import org.jf.dexlib2.builder.instruction.BuilderPackedSwitchPayload; -import org.jf.dexlib2.builder.instruction.BuilderSparseSwitchPayload; -import org.jf.dexlib2.iface.ExceptionHandler; -import org.jf.dexlib2.iface.MethodImplementation; -import org.jf.dexlib2.iface.TryBlock; -import org.jf.dexlib2.iface.debug.DebugItem; -import org.jf.dexlib2.iface.debug.EndLocal; -import org.jf.dexlib2.iface.debug.LineNumber; -import org.jf.dexlib2.iface.debug.RestartLocal; -import org.jf.dexlib2.iface.debug.SetSourceFile; -import org.jf.dexlib2.iface.debug.StartLocal; -import org.jf.dexlib2.iface.instruction.Instruction; -import org.jf.dexlib2.iface.instruction.SwitchElement; -import org.jf.dexlib2.iface.instruction.formats.ArrayPayload; -import org.jf.dexlib2.iface.instruction.formats.Instruction10t; -import org.jf.dexlib2.iface.instruction.formats.Instruction10x; -import org.jf.dexlib2.iface.instruction.formats.Instruction11n; -import org.jf.dexlib2.iface.instruction.formats.Instruction11x; -import org.jf.dexlib2.iface.instruction.formats.Instruction12x; -import org.jf.dexlib2.iface.instruction.formats.Instruction20bc; -import org.jf.dexlib2.iface.instruction.formats.Instruction20t; -import org.jf.dexlib2.iface.instruction.formats.Instruction21c; -import org.jf.dexlib2.iface.instruction.formats.Instruction21ih; -import org.jf.dexlib2.iface.instruction.formats.Instruction21lh; -import org.jf.dexlib2.iface.instruction.formats.Instruction21s; -import org.jf.dexlib2.iface.instruction.formats.Instruction21t; -import org.jf.dexlib2.iface.instruction.formats.Instruction22b; -import org.jf.dexlib2.iface.instruction.formats.Instruction22c; -import org.jf.dexlib2.iface.instruction.formats.Instruction22s; -import org.jf.dexlib2.iface.instruction.formats.Instruction22t; -import org.jf.dexlib2.iface.instruction.formats.Instruction22x; -import org.jf.dexlib2.iface.instruction.formats.Instruction23x; -import org.jf.dexlib2.iface.instruction.formats.Instruction30t; -import org.jf.dexlib2.iface.instruction.formats.Instruction31c; -import org.jf.dexlib2.iface.instruction.formats.Instruction31i; -import org.jf.dexlib2.iface.instruction.formats.Instruction31t; -import org.jf.dexlib2.iface.instruction.formats.Instruction32x; -import org.jf.dexlib2.iface.instruction.formats.Instruction35c; -import org.jf.dexlib2.iface.instruction.formats.Instruction3rc; -import org.jf.dexlib2.iface.instruction.formats.Instruction51l; -import org.jf.dexlib2.iface.instruction.formats.PackedSwitchPayload; -import org.jf.dexlib2.iface.instruction.formats.SparseSwitchPayload; -import org.jf.dexlib2.iface.reference.Reference; -import org.jf.dexlib2.iface.reference.StringReference; -import org.jf.dexlib2.iface.reference.TypeReference; -import org.jf.dexlib2.writer.builder.DexBuilder; -import org.jf.util.ExceptionWithContext; - import java.util.AbstractList; import java.util.ArrayList; import java.util.Arrays; diff --git a/tinker-build/tinker-patch-lib/src/main/java/com/tencent/tinker/build/decoder/DexDiffDecoder.java b/tinker-build/tinker-patch-lib/src/main/java/com/tencent/tinker/build/decoder/DexDiffDecoder.java index afe67bfd0..58dc99bbc 100644 --- a/tinker-build/tinker-patch-lib/src/main/java/com/tencent/tinker/build/decoder/DexDiffDecoder.java +++ b/tinker-build/tinker-patch-lib/src/main/java/com/tencent/tinker/build/decoder/DexDiffDecoder.java @@ -17,6 +17,27 @@ package com.tencent.tinker.build.decoder; +import com.android.tools.smali.dexlib2.AccessFlags; +import com.android.tools.smali.dexlib2.DexFileFactory; +import com.android.tools.smali.dexlib2.Opcodes; +import com.android.tools.smali.dexlib2.ReferenceType; +import com.android.tools.smali.dexlib2.builder.BuilderMutableMethodImplementation; +import com.android.tools.smali.dexlib2.dexbacked.DexBackedDexFile; +import com.android.tools.smali.dexlib2.iface.DexFile; +import com.android.tools.smali.dexlib2.iface.Field; +import com.android.tools.smali.dexlib2.iface.Method; +import com.android.tools.smali.dexlib2.iface.MethodImplementation; +import com.android.tools.smali.dexlib2.iface.instruction.Instruction; +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction; +import com.android.tools.smali.dexlib2.iface.reference.FieldReference; +import com.android.tools.smali.dexlib2.iface.reference.MethodReference; +import com.android.tools.smali.dexlib2.iface.reference.TypeReference; +import com.android.tools.smali.dexlib2.util.MethodUtil; +import com.android.tools.smali.dexlib2.util.TypeUtils; +import com.android.tools.smali.dexlib2.writer.builder.BuilderField; +import com.android.tools.smali.dexlib2.writer.builder.BuilderMethod; +import com.android.tools.smali.dexlib2.writer.builder.DexBuilder; +import com.android.tools.smali.dexlib2.writer.io.FileDataStore; import com.tencent.tinker.android.dex.ClassDef; import com.tencent.tinker.android.dex.Dex; import com.tencent.tinker.android.dex.DexFormat; @@ -38,28 +59,6 @@ import com.tencent.tinker.commons.dexpatcher.DexPatchApplier; import com.tencent.tinker.commons.dexpatcher.DexPatcherLogger.IDexPatcherLogger; -import org.jf.dexlib2.AccessFlags; -import org.jf.dexlib2.DexFileFactory; -import org.jf.dexlib2.Opcodes; -import org.jf.dexlib2.ReferenceType; -import org.jf.dexlib2.builder.BuilderMutableMethodImplementation; -import org.jf.dexlib2.dexbacked.DexBackedDexFile; -import org.jf.dexlib2.iface.DexFile; -import org.jf.dexlib2.iface.Field; -import org.jf.dexlib2.iface.Method; -import org.jf.dexlib2.iface.MethodImplementation; -import org.jf.dexlib2.iface.instruction.Instruction; -import org.jf.dexlib2.iface.instruction.ReferenceInstruction; -import org.jf.dexlib2.iface.reference.FieldReference; -import org.jf.dexlib2.iface.reference.MethodReference; -import org.jf.dexlib2.iface.reference.TypeReference; -import org.jf.dexlib2.util.MethodUtil; -import org.jf.dexlib2.util.TypeUtils; -import org.jf.dexlib2.writer.builder.BuilderField; -import org.jf.dexlib2.writer.builder.BuilderMethod; -import org.jf.dexlib2.writer.builder.DexBuilder; -import org.jf.dexlib2.writer.io.FileDataStore; - import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -164,7 +163,7 @@ protected String getRelativeDexName(File oldDexFile, File newDexFile) { private void collectClassesInDex(File dexFile) throws IOException { Logger.d("Collect class descriptors in " + dexFile.getName()); final DexFile dex = DexFileFactory.loadDexFile(dexFile, Opcodes.forApi(29)); - for (org.jf.dexlib2.iface.ClassDef classDef : dex.getClasses()) { + for (com.android.tools.smali.dexlib2.iface.ClassDef classDef : dex.getClasses()) { descOfClassesInApk.add(classDef.getType()); if (AccessFlags.SYNTHETIC.isSet(classDef.getAccessFlags())) { descOfSyntheticClassesInApk.add(classDef.getType()); @@ -277,7 +276,7 @@ private void checkIfLoaderClassesReferToNonLoaderClasses() Logger.d("Check if loader classes in " + dexFile.getName() + " refer to any classes that is not in loader class patterns."); final DexFile dex = DexFileFactory.loadDexFile(dexFile, Opcodes.forApi(29)); - for (org.jf.dexlib2.iface.ClassDef classDef : dex.getClasses()) { + for (com.android.tools.smali.dexlib2.iface.ClassDef classDef : dex.getClasses()) { final String currClassDesc = classDef.getType(); if (!Utils.isStringMatchesPatterns(currClassDesc, loaderClassPatterns)) { continue; @@ -431,9 +430,9 @@ private void generateChangedClassesDexFile() throws IOException { int changedDexId = 1; for (Dex dex : owners) { Set descOfChangedClassesInCurrDex = ownerToDescOfChangedClassesMap.get(dex); - DexFile dexFile = new DexBackedDexFile(org.jf.dexlib2.Opcodes.forApi(20), dex.getBytes()); + DexFile dexFile = new DexBackedDexFile(Opcodes.forApi(20), dex.getBytes()); boolean isCurrentDexHasChangedClass = false; - for (org.jf.dexlib2.iface.ClassDef classDef : dexFile.getClasses()) { + for (com.android.tools.smali.dexlib2.iface.ClassDef classDef : dexFile.getClasses()) { if (descOfChangedClassesInCurrDex.contains(classDef.getType())) { isCurrentDexHasChangedClass = true; break; @@ -443,7 +442,7 @@ private void generateChangedClassesDexFile() throws IOException { continue; } DexBuilder dexBuilder = new DexBuilder(Opcodes.forApi(23)); - for (org.jf.dexlib2.iface.ClassDef classDef : dexFile.getClasses()) { + for (com.android.tools.smali.dexlib2.iface.ClassDef classDef : dexFile.getClasses()) { if (!descOfChangedClassesInCurrDex.contains(classDef.getType())) { continue; } @@ -458,7 +457,8 @@ private void generateChangedClassesDexFile() throws IOException { field.getType(), field.getAccessFlags(), field.getInitialValue(), - field.getAnnotations() + field.getAnnotations(), + field.getHiddenApiRestrictions() ); builderFields.add(builderField); } @@ -476,6 +476,7 @@ private void generateChangedClassesDexFile() throws IOException { method.getReturnType(), method.getAccessFlags(), method.getAnnotations(), + method.getHiddenApiRestrictions(), methodImpl ); builderMethods.add(builderMethod);