【问题标题】:Disabling Logs in Android using Proguard使用 Proguard 在 Android 中禁用日志
【发布时间】:2021-12-09 21:06:14
【问题描述】:

我添加了 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(); 
                            }
                        });

此方法获取 lat 和 lng 并从 google GeoCoder 获取地址。 当我删除 proguard 规则时,一切正常。甚至不知道它是如何相关的。我在 4 种不同的设备上尝试过。

编辑:

在这里你可以看到 map.center() 工作,我可以得到本地化它只是 addDepart.setText() 不起作用。

【问题讨论】:

    标签: android logging proguard google-geocoder


    【解决方案1】:

    显然使用这个

    -assumenosideeffects class android.util.Log {
      *;
    }
    

    确实破坏了我的代码,因为

    这条规则规定任何在 android.util.Log 及其 超类没有副作用。包括同步 在 Object 类上定义的方法。因为单一个超类 android.util.Log 是 java.lang.Object 。而且 Object#notify 非常多 有副作用。

    所以要非常小心假设没有副作用,并始终考虑指定确切的签名,因为它也会影响超类。

    改用这个:

    -assumenosideeffects class android.util.Log {
      v(...);
      d(...);
      i(...);
      w(...);
      e(...);
      println(...);
    }
    

    Source

    【讨论】:

      猜你喜欢
      • 2014-05-17
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多