Skip to content

Commit

Permalink
预留asm入口,待加入autoInject
Browse files Browse the repository at this point in the history
  • Loading branch information
YummyLau committed Aug 12, 2019
1 parent 8b1e979 commit a8ebd03
Show file tree
Hide file tree
Showing 69 changed files with 304 additions and 269 deletions.
6 changes: 3 additions & 3 deletions app/src/main/java/com/plugin/component/MainActivity.java
Expand Up @@ -2,7 +2,6 @@

import android.os.Bundle;

import com.effective.android.module.ModuleMamager;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.plugin.library.IAction;
Expand All @@ -19,13 +18,14 @@

public class MainActivity extends AppCompatActivity {

@MethodCost
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ModuleMamager.register(IAction.class, new LibraryAction());
SdkManager.register(IAction.class, new LibraryAction());
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
Expand All @@ -34,7 +34,7 @@ public void onClick(View view) {
.setAction("Action", null).show();
}
});
((TextView) findViewById(R.id.text)).setText(ModuleMamager.getService(IAction.class).getName());
((TextView) findViewById(R.id.text)).setText(SdkManager.getService(IAction.class).getName());
}

@Override
Expand Down
8 changes: 4 additions & 4 deletions component-plugin/build.gradle
Expand Up @@ -17,13 +17,13 @@ uploadArchives {
}

dependencies {
compile 'com.android.tools.build:gradle:3.3.0'
compile group: 'org.javassist', name: 'javassist', version: '3.20.0-GA'
//gradle sdk
compile gradleApi()
//groovy sdk
compile localGroovy()
compile 'com.android.tools.build:gradle:3.3.0'
compile 'org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.10'
compile 'org.ow2.asm:asm:7.1'
compile 'org.ow2.asm:asm-commons:7.1'
compile 'org.ow2.asm:asm-util:7.1'
}

sourceSets {
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified component-plugin/build/libs/module-1.0.0.jar
Binary file not shown.
Expand Up @@ -8,7 +8,8 @@ import com.plugin.component.extension.module.ProjectInfo
import com.plugin.component.extension.option.PublicationOption
import com.plugin.component.extension.option.RunAloneOption
import com.plugin.component.listener.OnModuleExtensionListener
import com.plugin.component.transform.CodeTransform

import com.plugin.component.transform.ComponentTransform
import com.plugin.component.utils.JarUtil
import com.plugin.component.extension.PublicationManager
import com.plugin.component.extension.ComponentExtension
Expand Down Expand Up @@ -206,9 +207,10 @@ class ComponentPlugin implements Plugin<Project> {
}
}
if (projectInfo.isCompileModuleAndAssemble()) {
childProject.extensions.findByType(BaseExtension.class).registerTransform(new CodeTransform(childProject))
// childProject.extensions.findByType(BaseExtension.class).registerTransform(new CodeTransform(childProject))
}
}
childProject.extensions.findByType(BaseExtension.class).registerTransform(new ComponentTransform())
} else {
childProject.apply plugin: Constants.PLUGIN_LIBRARY
Logger.buildOutput("project.apply plugin: com.android.library")
Expand Down
@@ -0,0 +1,16 @@
package com.plugin.component.anno;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 用于注解 IComponent接口,自动注入
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.CLASS)
public @interface AutoInjectComponent {

String name() default "DEFAULT";
}
@@ -0,0 +1,14 @@
package com.plugin.component.anno;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 方法耗时
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface MethodCost {
}
@@ -0,0 +1,13 @@
package com.plugin.component.asm;


import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;

public class ComponentClassVisitor extends ClassVisitor {

public ComponentClassVisitor(ClassVisitor classVisitor) {
super(Opcodes.ASM7, classVisitor);
}
}
@@ -0,0 +1,76 @@
package com.plugin.component.asm;

import com.android.ddmlib.Log;
import com.plugin.component.anno.MethodCost;

import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import org.objectweb.asm.commons.AdviceAdapter;

public class MethodCostClassVisitor extends ClassVisitor {

private static final String sCostCachePath = "com.plugin.component/CostCache";

public MethodCostClassVisitor(ClassVisitor classVisitor) {
super(Opcodes.ASM7, classVisitor);
}

@Override
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
MethodVisitor mv = super.visitMethod(access, name, descriptor, signature, exceptions);
mv = new AdviceAdapter(Opcodes.ASM7, mv, access, name, descriptor) {

private boolean cost = false;

@Override
protected void onMethodEnter() {
if (cost) {
mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitLdcInsn("========start=========");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
"(Ljava/lang/String;)V", false);

mv.visitLdcInsn(name);
mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J", false);
mv.visitMethodInsn(INVOKESTATIC, sCostCachePath, "setStartTime",
"(Ljava/lang/String;J)V", false);
}
}

@Override
protected void onMethodExit(int opcode) {
if (cost) {
mv.visitLdcInsn(name);
mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J", false);
mv.visitMethodInsn(INVOKESTATIC, sCostCachePath, "setEndTime",
"(Ljava/lang/String;J)V", false);

mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitLdcInsn(name);
mv.visitMethodInsn(INVOKESTATIC, sCostCachePath, "getCostTime",
"(Ljava/lang/String;)Ljava/lang/String;", false);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
"(Ljava/lang/String;)V", false);

mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
mv.visitLdcInsn("========end=========");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println",
"(Ljava/lang/String;)V", false);
}
}

@Override
public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) {
//判断是否使用某个注解
if (Type.getDescriptor(MethodCost.class).equals(descriptor)) {
cost = true;
}
return super.visitAnnotation(descriptor, visible);
}
};
return mv;
}
}

This file was deleted.

0 comments on commit a8ebd03

Please sign in to comment.