2022年4月27日 星期三

讓 Android Studio 編譯提示訊息,明確指出使用到已棄用API的程式位置

[情況]
Android Studio 編譯時,提示程式使用到已棄用的API,但沒指出哪邊使用到,另外提示加上 -Xlint:deprecation 後重新編譯,可取得更詳盡訊息。
Note: ... MainActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.



[解決方式]
Android Studio 編譯加 -Xlint:deprecation 的方式,
開啟 build.gradle,加上
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
修改 build.gradle 後,會詢問將專案同步「Sync Now」,按「Sync Now」同步。


重新編譯,這次的提示訊息,明確指出哪邊使用到已棄用的API了
... MainActivity.java:16: warning: [deprecation] Handler() in Handler has been deprecated
        new Handler().postDelayed(new Runnable() {
        ^
1 warning

原來是 Handler() 這邊有問題
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        .....
    }
}, 2000); 

查了一下 Handler() 用法,新版寫法須顯性指定 Looper
加上 Looper.getMainLooper() 即可:
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        .....
    }
}, 2000); 



參考:


沒有留言:

張貼留言