@@ -19,7 +19,6 @@ import java.util.jar.JarOutputStream
1919import java.util.zip.ZipEntry
2020
2121import 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)
0 commit comments