![](/img/trans.png)
[英]Different dependencies for debug and release in gradle and Android Studio
[英]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.