Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

chenthreetrees/ttreeplugin

Repository files navigation

TtreePlugin

Gai Cha Jian Zhu Yao Ti Gong Yi Tao Pei Zhi Gui Ze ,Wai Bu Bao Huo Zhe appGong Cheng Zhi Jie Tuo Zhan Shi Yong Chang Jing He Gong Neng . Ben Zhao Jin Liang Bu Qu Xiu Gai Cha Jian Dai Ma De Si Xiang Lai Bian Xie ,Gan Xie NeacyDe Bang Zhu .

Yuan Li :Gai Cha Jian Zhu Yao Tong Guo Zhu Jie He Pi Pei Gui Ze Lai Zhao Dao Dui Ying De Fang Fa ,Zai Fang Fa De enterHe exitDe Shi Hou Zhu Ru Xiang Ying De Dai Ma

Shi Yong

Zai Xiang Mu De gradleWen Jian Yin Yong Cha Jian :

buildscript {
repositories {
maven {
url 'https://jitpack.io'
}
}
dependencies {
classpath 'com.github.chenthreetrees:ttreeplugin:2.0.9'
}
}

Zai appDe gradleWen Jian Shi Yong Cha Jian :

apply plugin: 'ttreeplugin'

Shi Yong Cha Jian Tuo Zhan Bao

Xiang Mu De gradleWen Jian :

allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}

Zai appDe gradleWen Jian Yin Yong Yi Lai :

compile 'com.github.chenthreetrees:ttreepluginext:1.0.7'

Zai applicationChu Shi Hua : TtreePlugin.init(application)

Gai Tuo Zhan Bao Zhu Yao You Yi Xia Gong Neng :

Fang Fa Hao Shi Ji Suan

Zai Xu Yao Tong Ji Hao Shi De Fang Fa Tian Jia Zhu Jie @TimeCost

Qie Mian Zhu Ru Dai Ma

Zai Xu Yao Zhu Ru Dai Ma De Fang Fa Tian Jia Zhu Jie @Cut,Zhu Jie Zhi Ke Yi Chuan typeLai Qu Fen Zai He Gua De Di Fang Tian Jia Jian Ting :

TtreePlugin.setOnCutListener(new TtreePlugin.IOnCutListener() {
@Override
public void onCutEnter(int type)
{
}

@Override
public void onCutExit(int type)
{
}
});

Fang Dou Dong

Zai Xu Yao Fang Dou Dong De Di Fang Tian Jia @Debounce(time = 1000), timeWei Dou Dong De Shi Jian

Dong Tai Quan Xian Shen Qing

Zhu Yi :Dong Tai Shen Qing De Quan Xian Xu Yao Zai manifestZhu Ce

Zai Xu Yao Dong Tai Shen Qing Quan Xian De Fang Fa Tian Jia Zhu Jie @Permission,Quan Xian Shi Yong PermissionConstsLi Mian De Zhi Li Ru :

@Permission(PermissionConsts.STORAGE)

@Permission({PermissionConsts.STORAGE,PermissionConsts.CAMERA})

Zai He Gua De Di Fang (Zao Yu Zhu Jie )She Zhi Quan Xian Shen Qing Hui Diao :

//Quan Xian Bei Ju Jue
TtreePlugin.setOnPermissionDeniedListener()
//Shou Quan Cheng Gong
TtreePlugin.setOnPermissionGrantedListener()

Shu Ju Mai Dian He Shi Jian Lan Jie

Zai gradleWen Jian Tian Jia Guo Lu Tiao Jian :

Gen Ju Xu Qiu Tian Jia Tiao Jian ,Bi Ru Xiang Dui Suo You De viewDe onclickZuo Tong Yi De Mai Dian Chu Li ,Ke Yi Shi Yong Ru Xia Gui Ze (Can Kao Xia Wen De Pei Zhi Gui Ze ):

ttree {

//Ju Ti Pei Zhi
matchData = [
'ClassFilter' : [
//Gen Ju Jie Kou Ming Pi Pei
['InterfaceName': 'android.view.View$OnClickListener',
'MethodName': 'onClick', 'MethodDes': '(Landroid/view/View;)V']
]
}

Qing Xiang Xi Yue Du Pei Zhi Gui Ze ,Huo Zhe Can Kao demo

Zai He Gua De Di Fang Tian Jia Jian Ting :

TtreePlugin.setOnMethodListener(new TtreePlugin.IOnMethodListener() {
@Override
public boolean onMethodEnter(Object object,String className,String methodName, Object[] objects)
{
}

@Override
public void onMethodExit(Object object,String className,String methodName, Object[] objects)
{
}
});

Ru Guo Xu Yao Lan Jie Fang Fa ,Zai onMethodEnterLi Fan Hui true,Tian Jia Lan Jie Shi Jian :

TtreePlugin.setOnInterceptListener(new TtreePlugin.IOnInterceptListener() {
@Override
public Object onIntercept(Object object, String className, String methodName, String annotationName, Object[] objects, String jsonValue, String returnType)
{
if("testInterceptForClass".equals(methodName))
{
Toast.makeText(getApplicationContext(),"testInterceptForClas s is intercepted",Toast.LENGTH_SHORT).show();
return 0;
}
return TtreePlugin.getReturnType(returnType);
}
});

Mo Ren Fan Hui Zhi Ke Shi Yong TtreePlugin.getReturnType(returnType)

Bian Yi Wan Cheng Hou ,Ke Yi Zai appXiang Mu Lu Jing build\intermediates\transforms\AutoTransformCha Kan Zui Zhong Zhu Ru De Dai Ma

Qi Ta Shi Yong Chang Jing ,Zai Ping Shi Kai Fa Zhong You Yu Dao ,Zai Jin Xing Tuo Zhan

Ru Guo Xiang Yao Zi Ding Yi ,Qing Can Kao demoHe Yuan Ma

Pei Zhi Gui Ze

Cha Jian De Mo Ren Pei Zhi Ru Guo Bu Neng Man Zu Xu Qiu ,Ke Yi Tong Guo Zai appDe gradleWen Jian Li Mian Zi Ding Yi Pei Zhi Ru Guo Zhi Xu Yao Jian Dan De Gong Neng ,Ke Yi Xian Lue Guo Ci Bu Zou

Zai gradleWen Jian Zui Hou Tian Jia ttree,Ru Xia :

onMethodEnter->onMethodExit 'MethodVisitor': { MethodVisitor methodVisitor, int access, String name, String desc, String className -> AutoMethodVisitor adapter = new AutoMethodVisitor(methodVisitor, access, name, desc, className) { @Override protected void onMethodEnter() { super.onMethodEnter(); if("testOverride".equals(name)) { methodVisitor.visitLdcInsn(name) methodVisitor.visitLdcInsn("========start=========") methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, "android/util/Log", "e", "(Ljava/lang/String;Ljava/lang/String;)I", false) } } @Override protected void onMethodExit(int opcode) { super.onMethodExit(opcode) } } return adapter } ] }">ttree {
//Shi Fou Kai Qi Diao Shi ,Bian Yi Shi Da Yin Chu log
isDebug = true
//Ju Ti Pei Zhi
matchData = [
// 'AnnotationPath' : 'com.threetree.ttreeplugin.annotation',
// 'AnnotationReceiver' : 'com.threetree.ttreeplugin.MyReceiver',
// 'ClassReceiver' : 'com.threetree.ttreeplugin.MyReceiver',
'ClassFilter' : [
//Gen Ju Lei Xing Pi Pei
['ClassName' : 'com.threetree.ttreeplugin.MainActivity',
'MethodName': 'testClassName', 'MethodDes': '()V'],
//Gen Ju Guan Jian Zi Pi Pei
['ContainName' : 'Activity',
'MethodName': 'testContainName', 'MethodDes': '(Ljava/lang/String;)V'],
//Gen Ju Jie Kou Ming Pi Pei
['InterfaceName': 'android.view.View$OnClickListener',
'MethodName': 'onClick', 'MethodDes': '(Landroid/view/View;)V'],
//Gen Ju Lei Xing Pi Pei
['ClassName' : 'com.threetree.ttreeplugin.MainActivity',
'MethodName': 'testOverride', 'MethodDes': '()V', 'Override' : true]
],
//Gao Ji Yong Fa ,Shen Yong . Cha Ru De Zi Jie Ma ,Fang Fa De Zhi Xing Shun Xu visitAnnotation->onMethodEnter->onMethodExit
'MethodVisitor': {
MethodVisitor methodVisitor, int access, String name, String desc, String className ->
AutoMethodVisitor adapter = new AutoMethodVisitor(methodVisitor, access, name, desc, className) {
@Override
protected void onMethodEnter() {
super.onMethodEnter();
if("testOverride".equals(name))
{
methodVisitor.visitLdcInsn(name)
methodVisitor.visitLdcInsn("========start=========")
methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, "android/util/Log", "e", "(Ljava/lang/String;Ljava/lang/String;)I", false)
}
}

@Override
protected void onMethodExit(int opcode) {
super.onMethodExit(opcode)
}
}
return adapter
}
]
}

Zhu Yi : ttree,isDebug,matchData,AnnotationPath,AnnotationReceiver,Cl assReceiver ClassFilter,ClassName,MethodName,ContainName,InterfaceName,M ethodDes,Override,MethodVisitor Zhe Xie Yue Ding De Pin Xie Bu Neng Cuo Wu .

AnnotationPath: StringLei Xing ,Shi Yong Zi Ding Yi Zhu Jie Shi ,Zhu Jie Suo Zai De Bao Lu Jing (Jian Dan Gong Neng ,Shi Yong Tuo Zhan Bao De Zhu Jie Gong Neng Ji Ke ,Wu Xu Pei Zhi Gai Can Shu )

AnnotationReceiver: StringLei Xing ,Shi Yong Zi Ding Yi Zhu Jie Shi ,Chu Li Zhu Jie De Lei ,Bi Xu Shi Yong Quan Lu Jing (Jian Dan Gong Neng ,Shi Yong Tuo Zhan Bao De Zhu Jie Gong Neng Ji Ke ,Wu Xu Pei Zhi Gai Can Shu )

ClassReceiver: StringLei Xing ,Bi Xu Shi Yong Quan Lu Jing ,Zi Ding Yi Pi Pei Gui Ze De Shi Jian Jie Shou Qi ,Ke Yi Yu AnnotationReceiverTong Ming Zi Ding Yi ClassReceiverZhi Hou ,Tuo Zhan Bao Li Mian De ClassReceiverJiang Bu Zai Jie Shou (Jian Dan Gong Neng ,Shi Yong Tuo Zhan Bao De Jie Shou Qi Ji Ke ,Wu Xu Pei Zhi Gai Can Shu )

ClassName: StringLei Xing ,Lei Ming ,Quan Lu Jing (Can Kao Shang Mian De Xie Fa )

InterfaceName: StringLei Xing ,Jie Kou Ming ,Quan Lu Jing (Can Kao Shang Mian De Xie Fa )

ContainName: StringLei Xing ,Guan Jian Zi ,Bao Han Gai Guan Jian Zi De Suo You Lei (Can Kao Shang Mian De Xie Fa )

MethodName: StringLei Xing ,Fang Fa Ming (Can Kao Shang Mian De Xie Fa )

MethodDes: StringLei Xing ,Fang Fa De Miao Shu Fu

MethodDesBiao Shi Fang Fa Miao Shu Fu ,Can Kao Ru Xia :

Biao Shi Zi Fu Han Yi
B Ji Ben Lei Xing byte
C Ji Ben Lei Xing char
D Ji Ben Lei Xing double
F Ji Ben Lei Xing float
I Ji Ben Lei Xing int
J Ji Ben Lei Xing long
S Ji Ben Lei Xing short
Z Ji Ben Lei Xing boolean
V Te Shu Lei Xing void
L Dui Xiang Lei Xing ,Ru Ljava/lang/Object;

Yong Miao Shu Fu Lai Miao Shu Fang Fa Shi ,An Zhao Xian Can Shu Lie Biao ,Hou Fan Hui Zhi De Shun Xu Miao Shu ,Can Shu Lie Biao An Shun Xu Fang Zai "()"Zhi Nei . Dui Yu Shu Zu Lei Xing ,Mei Yi Wei Du Shi Yong Yi Ge Qian Zhi De "["Zi Fu Lai Miao Shu ,Ru String[][]Lei Xing De Er Wei Shu Zu ,Jiang Bei Ji Lu Wei "[[Ljava/lang/String;". Fang Fa int indexOf(char[] source,int sourceOffset,int sourceCount,String content)De Miao Shu Fu Wei "([IILjava/lang/String;)I".

Override: booleanLei Xing ,Shi Fou Zhong Zai MethodVisitor(Gao Ji Yong Fa ,Xu Yao Dui asmYou Yi Ding De Liao Jie ,Bu Tui Jian Shi Yong )

MethodVisitor: Zai OverrideWei trueDe Shi Hou Shi Yong (Can Kao demo,Gao Ji Yong Fa ,Xu Yao Dui asmYou Yi Ding De Liao Jie ,Bu Tui Jian Shi Yong )

Pi Pei Gui Ze You Xian Ji : ClassName > InterfaceName > ContainName

ClassReceiverDe Chu Li Xiang Ying Shi Jian De Fang Fa :

Tong Guo Pi Pei Zhu Jie ,Fang Fa Jin Ru Shi Diao Yong

public static boolean onMethodEnterForAnnotation(Object object, String className,
String methodName, String annotationName,
Object[] objects, String jsonValue)

Tong Guo Pi Pei Zhu Jie ,Fang Fa Lan Jie Shi Diao Yong

public static Object onInterceptForAnnotation(Object object, String className,
String methodName, String annotationName,
Object[] objects, String jsonValue, String returnType)

Tong Guo Pi Pei Zhu Jie ,Fang Fa Tui Chu Shi Diao Yong

public static void onMethodExitForAnnotation(Object object, String className,
String methodName, String annotationName,
Object[] objects, String jsonValue)

Gen Ju Lei Ming Deng Gui Ze Pi Pei ,Fang Fa Jin Ru Shi Diao Yong

public static boolean onMethodEnterForClass(Object object, String className, String methodName, Object[] objects)

Gen Ju Lei Ming Deng Gui Ze Pi Pei ,Fang Fa Lan Jie Shi Diao Yong

public static Object onInterceptForClass(Object object, String className, String methodName, Object[] objects, String returnType)

Gen Ju Lei Ming Deng Gui Ze Pi Pei ,Fang Fa Tui Chu Shi Diao Yong

public static void onMethodExitForClass(Object object, String className, String methodName, Object[] objects)

Shuo Ming : onMethodEnterForAnnotationHuo Zhe onMethodEnterForClassFan Hui true,Ze Biao Shi Zhi Xing Lan Jie Shi Jian . Xu Yao Zhu Yi ,Fang Fa Ming He Can Shu Lei Xing ,Fan Hui Lei Xing Bi Xu Yu Shang Mian De Yi Zhi ,Dang Lan Jie Fa Sheng Hou ,onMethodExitJiang Bu Hui Zai Bei Diao Yong , Duo Ge Zhu Jie Tong Shi Shi Yong Lan Jie Gong Neng Shi Hou ,Jiang Zhi You Di Yi Ge Zhu Jie De Lan Jie Sheng Xiao . object:Biao Shi Gai Fang Fa De Lei Dui Xiang Zhi Zhen ,Ji this(Zhu Yi Nei Bu Lei De this),Jing Tai Fang Fa Gai Zhi Wei null className:Biao Shi Quan Lu Jing Lei Ming (Zhu Yi Nei Bu Lei De Lei Ming ,Hui You "$") methodName: Biao Shi Fang Fa Ming annotationName: Biao Shi Zhu Jie Ming objects: methodNameZhe Ge Fang Fa De Can Shu Zhi jsonValue:Jie Gou Shi Hashmap,Dui Ying Zhu Jie De keyHe value returnType: Fan Hui Zhi Lei Xing ,Can Kao Miao Shu Fu Biao .

About

Dong Tai Zhu Ru Dai Ma Cha Jian ,Zhi Chi Zi Ding Yi ,Zhi Chi Fang Fa Lan Jie ,Yi Jing Shi Xian Fang Fa Hao Shi Tong Ji ,Dong Tai Quan Xian Shen Qing ,Qie Mian Bian Cheng ,Fang Dou Dong ,Shu Ju Mai Dian Gong Neng

Topics

Resources

Readme

Stars

Watchers

Forks

Packages

Contributors