如何将国外商业网站的网页游戏通过搬砖方式赚钱?
摘要:国外商业网站,网页游戏搬砖赚钱,网站优化建设兰州,陕建十四建公司简介本文讲解如何编译插桩操纵字节码。 就使用 ASM 来实现简单的编译插桩效果,通过插桩实现在每一个 Activity 打开时输出相应的 log
国外商业网站,网页游戏搬砖赚钱,网站优化建设兰州,陕建十四建公司简介本文讲解如何编译插桩操纵字节码。 就使用 ASM 来实现简单的编译插桩效果#xff0c;通过插桩实现在每一个 Activity 打开时输出相应的 log 日志。实现思路 过程主要包含两步#xff1a;
1、遍历项目中所有的 .class 文件 如何找到项目中编译生成的所有 .class 文件#…本文讲解如何编译插桩操纵字节码。 就使用 ASM 来实现简单的编译插桩效果通过插桩实现在每一个 Activity 打开时输出相应的 log 日志。实现思路 过程主要包含两步
1、遍历项目中所有的 .class 文件 如何找到项目中编译生成的所有 .class 文件是我们需要解决的第一个问题。众所周知Android Studio 使用 Gradle 编译项目中的 .java 文件并且从 Gradle1.5.0 之后我们可以自己定义 Transform来获取所有 .class 文件引用。但是 Transform 的使用需要依赖 Gradle Plugin。因此我们第一步需要创建一个单独的 Gradle Plugin并在 Gradle Plugin 中使用自定义 Transform 找出所有的 .class 文件。
2、遍历到目标 .class 文件 Activity之后通过 ASM 动态注入需要被插入的字节码 如果第一步进行顺利我们可以找出所有的 .class 文件。接下来就需要过滤出目标 Activity 文件并在目标 Activity 文件的 onCreate 方法中通过 ASM 插入相应的 log 日志字节码。
创建主项目 ASMLifeCycleDemo当前项目中只有一个 MainActivity如下
package com.jscode.asmlifecycledemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}
创建自定义 Gradle 插件 首先在 ASMLifeCycleDemo 项目中创建一个新的 module并选择 Android Library 类型命名为 asm_lifecycle_plugin。将 asm_lifecycle_plugin module 中除了 build.gradle 和 main 文件夹之外的所有内容都删除。然后在 main 目录下分别创建 groovy 和 java 目录结构如下 因为 Gradle 插件是使用 groovy 语言编写的所以需要新建一个 groovy 目录用来存放插件相关的.groovy类。 但 ASM 是 java 层面的框架所以在 java 目录里存放 ASM 相关的类。 然后在 groovy 中创建目录com.jscode.plugin并在此目录中创建类 LifeCyclePlugin.groovy 文件。 在 LifeCyclePlugin 中重写 apply 方法实现插件逻辑因为是 demo 演示所以我只是简单的打印 log 日志。 目录结构如上图代码如下
package com.jscode.pluginimport com.android.build.gradle.AppExtension
import org.gradle.api.Plugin
import org.gradle.api.Projectpublic class LifeCyclePlugin implements PluginProject {Overridevoid apply(Project project) {System.out.println(LifeCyclePlugin)def android project.extensions.getByType(AppExtension)LifeCycleTransform lt new LifeCycleTransform()android.registerTransform(lt)}
}
以看出 LifeCyclePlugin 实现了 gradle api 中的 Plugin 接口。
