簡體   English   中英

Android有用的調試/發布宏(使用gradle?)

[英]Android useful debug/release macros (using gradle?)

我正在寫一個Android應用程序。 我需要為發布和調試版本使用不同的變量值。 正如本網站某處提到的,我喜歡這樣:

private static final boolean debug = true;
if(debug){
    // do some debug work
} else{
      // do release work
  }

但在某些情況下,我需要調試/發布版本的最終變量(它們是類的成員)的不同值,並且此解決方案顯然不起作用。 有沒有這個問題的解決方案(除了手動更改變量),可能以某種方式使用Gradle腳本(如buildConfigField ,但在任何類)?

當然。 你可以在任何課程中完成

public final static String FINAL_STRING = BuildConfig.DEBUG ? "debug" : "release";

這種場景還有另一種方法,這個開源項目( Android Studio Macros )允許你通過使用“// <#DEBUG_AREA>和// <#/ DEBUG_AREA>”標簽來做你想做的事情以及一些更復雜的事情在您的代碼中,基本的想法是,當您更改構建變體時,這些標記中的任何內容都會被注釋,例如,如果您在for循環中有類似的內容:

       //=========This piece of code is only for logging purposes...=========
        Log.e("LogUserInfo", "Name: " + name);
        Log.e("LogUserInfo", "Id: " + user.getId());
        Log.e("LogUserInfo", "Id: " + user.getDistance());
        //====================================================================

而不是這樣做:

if(DEBUG){
      Log.e("LogginUserInfo", "Name: " + name);
      Log.e("LogginUserInfo", "Id: " + user.getId());
      Log.e("LogginUserInfo", "Id: " + user.getDistance());
 }

使用此宏,您可以執行此操作(完整方法):

private List<String> getNamesOfUsersNearMe(String zipCode){
    List<User> users = mBusinessLogic.getUsersByZipcode(zipCode);
    if(users == null || users.size() < 1){
        return null;
    }

    List<String> names = new ArrayList<String>();
    int totalUsers = users.size();
    for(int i = 0; i < totalUsers; i++){
        User user = users.get(i);
        String name = user.getName();
        names.add(name);
        //<#DEBUG_AREA>
        Log.e("LogginUserInfo", "Name: " + name);
        Log.e("LogginUserInfo", "Id: " + user.getId());
        Log.e("LogginUserInfo", "Id: " + user.getDistance());
        //</#DEBUG_AREA>
    }
    return names;
}

當您將構建變體更改為發布時,它將變為如下所示:

private List<String> getNamesOfUsersNearMe(String zipCode){
    List<User> users = mBusinessLogic.getUsersByZipcode(zipCode);
    if(users == null || users.size() < 1){
        return null;
    }

    List<String> names = new ArrayList<String>();
    int totalUsers = users.size();
    for(int i = 0; i < totalUsers; i++){
        User user = users.get(i);
        String name = user.getName();
        names.add(name);
        /*<#DEBUG_OFF>
            Log.e("LogginUserInfo", "Name: " + name);
            Log.e("LogginUserInfo", "Id: " + user.getId());
            Log.e("LogginUserInfo", "Id: " + user.getDistance());
        </#DEBUG_OFF>*/
    }

    return names;
}

對於長循環而言,哪種方式更好,並且在“釋放”模式下通過去除不必要的代碼使代碼更清晰,當然如果你回到“調試”它將取消注釋該區域並保持原來的方式是用“<#DEBUG_AREA>”標簽...

希望能幫助到你!

問候!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM