我正在尝试使用proguard从我最终签名的apk中删除所有日志。一切正常,但MediaPlayer仍然显示其错误日志。我花了两天时间尝试解决这个问题,但我没有找到解决此错误的解决方案,也没有从日志中删除此错误消息。 logcat中的错误:
https://github.com/jrendel/SwiftKeychainWrapper
我的代码(和整个应用程序)运行正常。该应用程序成功播放链接中的所有视频,此错误实际上没有任何意义。 我发现类似的问题here正如他们所说:
日志中的消息是内置于Android MediaPlayer中的调试消息。这不是一个实际错误..他们正在使用控制流的异常。有关内部血腥详细信息,请参阅Android MediaPlayer.java的setDataSource()来源。
好吧,我在调试代码中并不关心这个问题,但我不希望在我的生产应用程序中看到任何日志。我使用proguard从我的应用程序中删除所有日志。
我的E/MediaPlayer: setDataSource: IOException! uri=https://my-url
java.io.FileNotFoundException: No content provider: https://my-url
文件:
proguard-rules.pro
在我的-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static *** v(...);
public static *** i(...);
public static *** w(...);
public static *** d(...);
public static *** e(...);
}
# for Okhttp:
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
# Okio (okhttp)
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
# Glide specific rules #
# https://github.com/bumptech/glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
## Google Analytics 3.0 specific rules ##
-keep class com.google.analytics.** { *; }
# for search view #
-keep class android.support.v7.widget.SearchView { *; }
# for jsoup #
-keeppackagenames org.jsoup.nodes
# for share action provider #
-keep class android.support.v7.widget.ShareActionProvider { *; }
文件中:
build.gradle
但没有任何改变。所以问题是:
一般情况下,如何删除这些日志消息,并删除日志中的链接,尤其是MediaPlayer生成的链接?如果没有机会用proguard做,我有什么选择?在此先感谢您的帮助!
答案 0 :(得分:2)
简短回答:您无法
长答案:ProGuard仅处理属于您的应用程序的代码。 MediaPlayer是设备上安装的运行时库的一部分。当您的应用程序调用MediaPlayer时,它会使用您设备上安装的版本,而ProGuard无法处理此部分并删除相应的日志记录调用。