日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java代码编译时修改行为_GitHub - niuzhihua/AST_demo: 利用JavaParser框架在编译时修改语法树(源码)的 demo...

發布時間:2025/4/5 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java代码编译时修改行为_GitHub - niuzhihua/AST_demo: 利用JavaParser框架在编译时修改语法树(源码)的 demo... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本例子展示了如下功能:

1、刪除方法中的 打印日志代碼。

2、刪除指定的 方法 和 成員變量。

3、檢測方法中 是否有 new Thread 代碼。

4、生成新的類和方法。并在運行時驗證。

5、解析 類文件: MainActivity.java , 并在打印輸出類信息。

6、修改類中的方法。 將結果保存在工程目錄下的 /output 中。

7、在現有類 中生成一個方法 ,并在運行時驗證。

環境:

gradle4.1

classpath 'com.android.tools.build:gradle:3.0.1'

1、刪除類方法中的 日志 :

Log.xxxx

System.out.xxx

2、刪除指定的的 方法 和 成員變量

//過濾如下 成員變量 和 方法

public void test()

public int test(int a)

String abc

String def

3、檢測方法中 是否有 new Thread 代碼

若檢測到則在gradle 的build 控制臺中輸出:

警告: --代碼中含有 new Thread--onResume()

警告: --代碼中含有 new Thread--test(int a)

下面是利用javaparser 框架來造作代碼的例子:

4、

一:利用javaparser 生成一個類,并包含一個靜態方法。

二:利用javax.annotation.processing.Filer 文件工具 將代碼寫入到編譯路徑 :

/app/build/generated/source/apt/debug/ gen/GenClassA.class

這樣生成的代碼就會被編譯并打包進apk.

運行時在MainActivity 中驗證。

onClick(View v) {

Class clazz = Class.forName("com.nzh.ast.gen.GenClassA");

Method method = clazz.getMethod("genMethod", String.class, int.class);

Object obj = method.invoke(null, "test string", 33);

if (obj != null) {

List list = (List) obj;

Toast.makeText(MainActivity.this, list.toString(), Toast.LENGTH_LONG).show();

}

}

5、 解析 類文件: MainActivity.java , 并在打印輸出類信息。

6、 修改類文件: MainActivity.java , 并將結果備份保存在 /output 目錄下

一、在 MainActivity.java 中生成一個 方法:

public static List testNewMethod(String p1, List myList) {

java.util.List list = new ArrayList();

return list;

}

二、修改 MainActivity.java中的 old 方法:

修改前:

public void old(int i)

修改后:

public void old(int i, Map map)

三、 刪除 old方法 的方法體

刪除前:

public void old() {

int a = 6;

int b = 8;

int c = a + b;

}

刪除后:

public void old() {

}

四、修改old3 方法的注解,將@MethodAnnotaion 注解 替換為 @MethodAnnotaion2 注解。并填寫相應注解的值

修改前:

@MethodAnnotaion("abc")

public void old3() {

修改后:

@MethodAnnotaion2(kkk = "hahaha", iii = 666)

public void old3() {

7、 在現有類(TestLog.java)中生成一個方法 如下:

public static String genMethod(String str) {

String s = " hello world !!!-8-";

return s;

}

運行時在MainActivity 中驗證 入下:

onClick{

Class clazz = Class.forName("com.nzh.ast.demo.TestLog");

Method method = clazz.getMethod("genMethod", String.class);

Object obj = method.invoke(null, "test string");

if (obj != null) {

String result = (String) obj;

Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();

}

}

運行注意:

方式1 :先執行 gradlew :app:assembleDebug 命令 或 在build 視圖中點擊 restart 按鈕,

這樣就先生成了代碼。然后點擊 run app 按鈕運行app .

方式2 : 點擊 run app 按鈕運行app 兩次。 第一次是生成代碼。第二次將生成的代碼 編譯打包進apk.

總結

以上是生活随笔為你收集整理的java代码编译时修改行为_GitHub - niuzhihua/AST_demo: 利用JavaParser框架在编译时修改语法树(源码)的 demo...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。