在第一次进行apk打包时,点击Build->Generate Signed APK,选择好之后按Next后,有一个Signature Versions的选项。
在完全不了解的情况下,我想着肯定越高级的越好用,于是只给V2前打了勾。之后出现的问题是,在Android7.0的设备上可以安装并运行,在Android5.1上却报出“安装包已损坏”的错误。
因而在此对该知识点做下记录。
Signature Version安卓项目打包时的两种签名方式:
V1(Jar Signature): 传统通用方式。来自JDK。
V2(Full APK Signature): Android 7.0 引入的新方式。安装更快、验证方式更安全。不适用于旧安卓版本,且不强制。完整信息可参考—— https://developer.android.google.cn/about/versions/nougat/android-7.0.html#apk_signature_v2
所以为了追求更完美的发挥,应将两个勾同时勾上。若不勾选V1,则旧安卓版本无法安装;若不勾选V2,则对于Android7.0设备就舍弃了更快更安全的方式。
另外,这次开发中有涉及到对Double取精度的语句。网上查资料后我选择了DecimalFormat。但是在智能提示中我选择了android.icu.text.DecimalFormat,刚写完就报错,显示该语句需要 API Level 24 以上,而我的最低需求只有15。
于是我初生牛犊不怕虎地在 app\build.gradle 把最低需求一改,继续写了下去。
然后实际运行时在 Android5.1 闪退了。
于是我仔细观察后发现原来还有 java.text.DecimalFormat 这种通用的语句,只不过可能因为是 Android 开发所以就被挤到智能提示的后面去了。这种就能在各种安卓版本上完美运行了。
还有很多对象都是类似的情况,比如 BigDecimal、NumberFormat、SimleDateFormat 等等。以前也遇到过,但是由于不需要在真机运行,所以都是改一改最低需求然后继续。本以为就是个很简单的小程序,在虚拟机上跑的很完美。没想到在实际运行的时候会出这么多问题。但毕竟这是第一次嘛。并且我期待着,能够遇到并且解决更多的问题。这是提升自己水平的最快方法啦。
狠下心写的第一篇博客,值得纪念~我希望自己能坚持下去!