Skip to content

Commit abcef19

Browse files
author
niuxiaowei
committed
修改This feature requires ASM6
1 parent 5a6beeb commit abcef19

File tree

4 files changed

+35
-17
lines changed

4 files changed

+35
-17
lines changed

app/build.gradle

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
plugins {
2-
id 'com.android.application'
3-
id 'kotlin-android'
4-
id 'kotlin-android-extensions'
5-
}
1+
//plugins {
2+
apply plugin: 'com.android.application'
3+
apply plugin: 'kotlin-android'
4+
apply plugin: 'kotlin-android-extensions'
5+
//}
66

77
apply plugin: 'ReplaceMethodPlugin'
88

@@ -57,7 +57,7 @@ dependencies {
5757

5858
replaceMethod{
5959
open true
60-
openLog true
60+
openLog false
6161
logFilters "NetworkInterface"
6262
replaceByMethods{
6363
register {

build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
buildscript {
33
repositories {
44
// maven{
5-
// url '/home/niuxiaowie/mi/work/workspace/ReplaceMethodGithub/ReplaceMethod/localmaven'
5+
// url "${rootProject.projectDir}/localmaven"
66
// }
77
google()
88
jcenter()
@@ -14,13 +14,13 @@ buildscript {
1414
}
1515
}
1616
dependencies {
17-
classpath "com.android.tools.build:gradle:4.1.3"
17+
classpath 'com.android.tools.build:gradle:3.4.0'
1818
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
1919
classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.3.72"
2020
// NOTE: Do not place your application dependencies here; they belong
2121
// in the individual module build.gradle files
2222
// classpath "com.mi.tools:replacemetohd:1.0.3"
23-
classpath "com.github.niuxiaowei:ReplaceMethod:1.0.2"
23+
// classpath "com.github.niuxiaowei:ReplaceMethod:1.0.12"
2424
//自动化maven打包插件
2525
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
2626
}

replacemethod/src/main/groovy/com/mi/replacemethod/gradle/ReplaceMethodTransform.groovy

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import java.util.jar.JarOutputStream
1919
import java.util.zip.ZipEntry
2020

2121
import static org.objectweb.asm.ClassReader.EXPAND_FRAMES
22-
2322
/**
2423
* custom transform: tranform classes before dex
2524
* inputType、scope、isIncremental主要根据 task:transformClassesWithDex来设定
@@ -28,6 +27,7 @@ class ReplaceMethodTransform extends Transform {
2827

2928
private Project project
3029
private boolean isRelease
30+
private static sAMSVersion = getAMSVersion()
3131

3232
ReplaceMethodTransform(Project project, boolean isRelease) {
3333
this.project = project
@@ -63,7 +63,7 @@ class ReplaceMethodTransform extends Transform {
6363

6464
Config initConfig() {
6565
def replaceMethodConfig = project.replaceMethod
66-
Config config = new Config(replaceMethodConfig.open, replaceMethodConfig.openLog, isRelease,replaceMethodConfig.getLogFilters())
66+
Config config = new Config(replaceMethodConfig.open, replaceMethodConfig.openLog, isRelease, replaceMethodConfig.getLogFilters())
6767
if (replaceMethodConfig.replaceByMethods != null && replaceMethodConfig.replaceByMethods.getAbsReplaceByMethods() != null) {
6868
config.methods = replaceMethodConfig.replaceByMethods.getAbsReplaceByMethods().methods
6969
}
@@ -91,6 +91,28 @@ class ReplaceMethodTransform extends Transform {
9191
return true
9292
}
9393

94+
private static int getAMSVersion() {
95+
Class opClass = Opcodes.class
96+
//从asm7 asm6 asm5找
97+
try {
98+
opClass.getDeclaredField("ASM7")
99+
println '[ReplaceMethod]: amsversion: asm7'
100+
return Opcodes.ASM7
101+
} catch (Exception e) {
102+
println '[ReplaceMethod]: get amsversion7 exception:'+e.getMessage()
103+
}
104+
try {
105+
opClass.getDeclaredField("ASM6")
106+
println '[ReplaceMethod]: amsversion: asm6'
107+
return Opcodes.ASM6
108+
} catch (Exception e) {
109+
println '[ReplaceMethod]: get amsversion6 exception:'+e.getMessage()
110+
}
111+
112+
println '[ReplaceMethod]: amsversion: asm5'
113+
return Opcodes.ASM5
114+
}
115+
94116

95117
static void traceSrcFiles(DirectoryInput directoryInput, TransformOutputProvider outputProvider, Config config) {
96118

@@ -103,7 +125,7 @@ class ReplaceMethodTransform extends Transform {
103125
if (config.isNeedTraceClass(name)) {
104126
ClassReader classReader = new ClassReader(file.bytes)
105127
ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_MAXS)
106-
ClassVisitor cv = new ReplaceClassVisitor(Opcodes.ASM5, classWriter, config)
128+
ClassVisitor cv = new ReplaceClassVisitor(sAMSVersion, classWriter, config)
107129
classReader.accept(cv, EXPAND_FRAMES)
108130
byte[] code = classWriter.toByteArray()
109131
FileOutputStream fos = new FileOutputStream(
@@ -154,7 +176,7 @@ class ReplaceMethodTransform extends Transform {
154176
jarOutputStream.putNextEntry(zipEntry)
155177
ClassReader classReader = new ClassReader(IOUtils.toByteArray(inputStream))
156178
ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_MAXS)
157-
ClassVisitor cv = new ReplaceClassVisitor(Opcodes.ASM5, classWriter, config)
179+
ClassVisitor cv = new ReplaceClassVisitor(sAMSVersion, classWriter, config)
158180
classReader.accept(cv, EXPAND_FRAMES)
159181
byte[] code = classWriter.toByteArray()
160182
jarOutputStream.write(code)

replacemethod/src/main/java/com/mi/replacemethod/Config.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
package com.mi.replacemethod
22

33

4-
import com.sun.org.apache.bcel.internal.generic.INVOKESPECIAL
5-
import com.sun.org.apache.bcel.internal.generic.INVOKESTATIC
6-
import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL
74
import java.io.File
85
import java.io.FileNotFoundException
96
import java.util.HashSet
10-
import jdk.internal.org.objectweb.asm.Opcodes.*
117

128

139
/**

0 commit comments

Comments
 (0)