拦截所有Android活动onCreate

问题描述:

一直试图挂钩与字节好友的机器人,但与我的目标有问题;该目标是截获onCreate,然后向所有创建的活动添加Log.d(标记,“消息”) 。拦截所有Android活动onCreate

更新与进口

package he.herpa.autoloader; 

import android.app.Application; 
import android.content.Context; 
import android.util.Log; 

import net.bytebuddy.ByteBuddy; 
import net.bytebuddy.ClassFileVersion; 
import net.bytebuddy.android.AndroidClassLoadingStrategy; 
import net.bytebuddy.implementation.MethodDelegation; 
import net.bytebuddy.implementation.bind.annotation.SuperCall; 
import net.bytebuddy.matcher.ElementMatchers; 
import net.bytebuddy.utility.RandomString; 

import java.io.File; 
import java.io.IOException; 
import java.util.concurrent.Callable; 

public class App extends Application { 

private static final String TAG = "TEST"; 
@Override 
public void onCreate() { 
    super.onCreate(); 

      ByteBuddy byteBuddy; 
      byteBuddy = new ByteBuddy(ClassFileVersion.JAVA_V6); 

      try { 
       File file = this.getDir(RandomString.make(), Context.MODE_PRIVATE); 
       if (!file.isDirectory()) { 
        throw new IOException("Not a directory: " + file); 
       } 
       try { 

        byteBuddy 
          .redefine(Activity.class) 
          .method(ElementMatchers.named("onCreate")) 
          .intercept(MethodDelegation.to(Interceptor.class)) 
          .make() 
          .load(Activity.class.getClassLoader(), new AndroidClassLoadingStrategy(file)); 

       } catch (Throwable e) { 
        Log.w(TAG, e); 
        return; 
       } 
      } catch (Throwable e) { 
       Log.w(TAG, e); 
      } 

} 

@Override 
public void onTerminate() { 
    super.onTerminate(); 
} 


public static class Interceptor { 

    public static Void intercept(@SuperCall Callable<Void> zuper) throws Exception { 
     Log.d("Test", "Should have placed a log in all onCreates"); 
     return zuper.call(); 
    } 
} 

第一个问题是,该类活动似乎并没有被发现。

编辑java.lang.IllegalArgumentException: Cannot locate the class file for class he.herpa.autoloader.Activity using ClassFileLocator.ForClassLoader

第二个问题是,我是连在正确的轨道?

+0

为什么不使用[ActivityLifecycleCallbacks](http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html)? – CommonsWare

+0

找不到Activity类?你的进口报表是什么样的? –

+0

由于注射需要 – Hiam

Byte Buddy不支持在Android上重新定义或重新绑定。您只能在构建期间执行此操作,但Android的运行时不提供对Java字节代码的标准化访问。