使用 Proguard 在 Android 中禁用日志
Disabling Logs in Android using Proguard
我添加了 proguard 规则 -assumenosideeffects class android.util.Log {public *;}
所以我的发布版本没有日志。但在那之后一个特定的方法停止工作:
SingleShotLocationProvider.requestSingleUpdate(PassagerActivity.this,
new SingleShotLocationProvider.LocationCallback() {
@Override public void onNewLocationAvailable(SingleShotLocationProvider.GPSCoordinates location) {
// Log.e("xxx",location.latitude + "/" +location.longitude);
map.setCenter(new GeoCoordinate(location.latitude, location.longitude, 0.0),
Map.Animation.NONE);
currentloc = new LatLng(location.latitude, location.longitude);
// loadingDialog.stopLoadingDialog();
new Thread(new Runnable() {
public void run() {
GeoCoderApi.getAdressfromLatLng(PassagerActivity.this , location ,new GeoCoderApi.AdressCallback() {
@Override
public void onAdressAvailable(String adress) {
// Log.e("xxxadress",adress);
addDepart.post(new Runnable() {
public void run() {
addDepart.setText(adress);
}
});
}
}); }}).start();
}
});
此方法获取纬度和经度并从 google GeoCoder 获取地址。
当我删除 proguard 规则时,一切正常。甚至不知道它是如何相关的。我在 4 种不同的设备上尝试过。
编辑:
在这里你可以看到 map.center() 有效,我可以得到本地化它只是 addDepart.setText() 不起作用。
显然正在使用这个
-assumenosideeffects class android.util.Log {
*;
}
确实破坏了我的代码,因为
this rule says that anything public in android.util.Log and its
superclasses has no side-effects. That include the synchronization
methods defined on Object class. Because the single one super class of
android.util.Log is java.lang.Object . And Object#notify is very much
with side effects.
所以要非常小心假设没有副作用,并且总是考虑指定确切的签名,因为它也会影响超级 类。
并改用它:
-assumenosideeffects class android.util.Log {
v(...);
d(...);
i(...);
w(...);
e(...);
println(...);
}
我添加了 proguard 规则 -assumenosideeffects class android.util.Log {public *;}
所以我的发布版本没有日志。但在那之后一个特定的方法停止工作:
SingleShotLocationProvider.requestSingleUpdate(PassagerActivity.this,
new SingleShotLocationProvider.LocationCallback() {
@Override public void onNewLocationAvailable(SingleShotLocationProvider.GPSCoordinates location) {
// Log.e("xxx",location.latitude + "/" +location.longitude);
map.setCenter(new GeoCoordinate(location.latitude, location.longitude, 0.0),
Map.Animation.NONE);
currentloc = new LatLng(location.latitude, location.longitude);
// loadingDialog.stopLoadingDialog();
new Thread(new Runnable() {
public void run() {
GeoCoderApi.getAdressfromLatLng(PassagerActivity.this , location ,new GeoCoderApi.AdressCallback() {
@Override
public void onAdressAvailable(String adress) {
// Log.e("xxxadress",adress);
addDepart.post(new Runnable() {
public void run() {
addDepart.setText(adress);
}
});
}
}); }}).start();
}
});
此方法获取纬度和经度并从 google GeoCoder 获取地址。 当我删除 proguard 规则时,一切正常。甚至不知道它是如何相关的。我在 4 种不同的设备上尝试过。
编辑:
在这里你可以看到 map.center() 有效,我可以得到本地化它只是 addDepart.setText() 不起作用。
显然正在使用这个
-assumenosideeffects class android.util.Log {
*;
}
确实破坏了我的代码,因为
this rule says that anything public in android.util.Log and its superclasses has no side-effects. That include the synchronization methods defined on Object class. Because the single one super class of android.util.Log is java.lang.Object . And Object#notify is very much with side effects.
所以要非常小心假设没有副作用,并且总是考虑指定确切的签名,因为它也会影响超级 类。
并改用它:
-assumenosideeffects class android.util.Log {
v(...);
d(...);
i(...);
w(...);
e(...);
println(...);
}