日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2025/4/5 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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...的全部內容,希望文章能夠幫你解決所遇到的問題。

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