我只是准备将我的第一个应用程序发布到Android市场,我想知道你是否有任何关于你在发布超越显而易见的应用程序时可能遇到的任何经验的提示记录.
在将应用程序发布到市场之前,有什么隐藏的警告和/或关于该做什么的想法?例如,我的一个伙伴建议我删除我的代码中的所有注释,以防万一有人到达源代码,从而使得想要"代码夹克"更难以破译代码.我认为这是一个明智的建议.
在将他们的应用发布到Android市场之前,要做的事情是什么?
我有很多日志语句要调试,例如.
Log.v(TAG, "Message here");
Log.w(TAG, " WARNING HERE");
Run Code Online (Sandbox Code Playgroud)
在设备电话上部署此应用程序时,我想关闭可以启用/禁用日志记录的详细日志记录.
我遇到了以下段落:
在Visual Studio中编译代码时,IDE中的"调试与发布"设置对性能几乎没有差别......生成的代码几乎相同.C#编译器并没有真正进行任何优化.C#编译器只是吐出IL ...而在运行时它是执行所有优化的JITer.JITer确实具有调试/释放模式,这对性能产生巨大影响.但这并不能决定你是否运行项目的调试或发布配置,而是关闭是否附加了调试器."
有人可以指导我一篇能够证明这一点的微软文章吗?
谷歌搜索" C#debug vs release performance "主要返回结果,说" Debug有很多性能损失 "," 发布已经优化 "," 不要将调试部署到生产中 ".
我已成功实施Firebase崩溃报告,但我需要在应用程序运行时禁用该服务撤消'debug'Build Variant,以避免在开发期间控制台中出现非真实崩溃.
官方文档没有说明这一点.
我在发布Android应用程序时包含此ProGuard配置以去除调试日志语句:
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作 - 我可以从ProGuard日志和Android日志输出中看到Log.d("This is a debug statement");被删除的调用.
但是,如果我在此阶段反编译应用程序,我仍然可以看到所有使用的String文字 - 即This is a debug statement在此示例中.
有没有办法String从字节码中删除不再需要的每个?
我不完全确定我在文档中阅读的内容.是否可以留下一堆logD代码片段,或者我应该将它们注释掉,以免它们影响我的应用程序的性能.
谢谢,
我有点困惑,因为如果你读到日志对象(文档),你会看到:
"详细程度方面的顺序,从最小到最多是ERROR,WARN,INFO,DEBUG,VERBOSE.除了在开发过程中,不应该将详细编译到应用程序中.调试日志在运行时编译但是被剥离.错误,警告和信息记录始终保留."
几乎听起来可以将调试消息留在那里因为它们被"剥离"了.无论如何,谢谢你的答案,我会在完成后对它们进行评论.一旦应用程序完成,我就不需要它们了.
谢谢
从生产android应用程序中删除日志记录的最佳方法是什么.似乎proguard没有完全做到这一点,字符串仍然写入,所以我想知道从生产代码中删除日志记录的最佳解决方案是什么?
我有一个使用很多Log.d()或Log.e()调用调用的应用程序.现在我想创建我的最终发布包.Eclipse的Android Export功能提到删除"Debuggable"清单中的标志,我已经完成了.我是否还应该评论所有Log调用以提高应用程序的性能,或者这些调用在不可调试的最终版本包中什么都不做?
Android文档(http://developer.android.com/reference/android/util/Log.html)说:
除了在开发期间,不应该将详细编译到应用程序中.调试日志在运行时编译但被剥离.始终保留错误,警告和信息日志
我刚做了一个测试.在我的活动中,我写道:
private static String test(String what) {
Log.e("test", "I am called with argument: " + what);
return what;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("test", "log level: " + test("v"));
Log.d("test", "log level: " + test("d"));
Log.i("test", "log level: " + test("i"));
Log.w("test", "log level: " + test("w"));
Log.e("test", "log level: " + test("e"));
}
Run Code Online (Sandbox Code Playgroud)
我将我的项目导出为apk文件,然后我在手机上安装了这个apk.我在手机上运行这个应用程序,然后查看了日志.在那里,我看到函数测试被调用了五次,所有五次调用Log.something函数导致其文本被写入日志.
Log.d调用在运行时是否真的被剥离了?
android ×9
debugging ×2
logging ×2
performance ×2
android-log ×1
c# ×1
firebase ×1
google-play ×1
proguard ×1
publishing ×1
release ×1