安卓开发只考虑 API 兼容就可以不闪退不会异常了吗?

2015-10-13 12:28:19 +08:00
 system

同事说安卓开发者只考虑 API 兼容了,不同机型充其量就是界面不一样而已,不会发生闪退异常什么的?

说不用考虑不同机型,只要在 Eclipse 里写好代码就可以了,谷歌已经把 API 版本兼容最好了,最多界面不一样。

12161 次点击
所在节点    Android
37 条回复
feicien
2015-10-13 14:05:05 +08:00
我在开发 Android 应用的时候基本不用考虑机型的
monsoon
2015-10-13 15:08:03 +08:00
我们觉得一些人回帖跟 LZ 的想要问的问题不一样......

安卓开发只用考虑 API 兼容就可以了:
我觉得这句话基本是对的, Android 的文档里的 API 都是公共的 API, 开发者只用考虑什么版本的 Android 的 API 有什么变化就可以了. 如果有 Android 发行商 魔改了公共的 API 部分实现, 这是这些开放商的问题.

我觉得 21L 说的对, 我开发 Android 的时候从来不考虑机型的, 只要原生通过了, 绝大部分机子都是没问题的.

很多人只是被 楼主 你的标题迷惑了, 因为你的标题本来就是错的, 楼主你是程序员的话, 就应该知道的. 你写程序的时候可以跟人保证没有 bug 吗, 比如说你一个很简单的网页应用没问题, 但是因为 硬盘 满了, 结果用户无法正常上传文件, bug 不就有了吗?

实际上很多个人的开发基本上不会为 小米、魅族和三星 做过什么特别的处理, 应用跑的没准比国产大牌应用跑的还好.
monsoon
2015-10-13 15:17:32 +08:00
还有官方有发行厂商兼容的说明的 https://source.android.com/compatibility/overview.html
虽然我没了解过, 应该跟 Linux 的 POSIX 之类的比较接近.

当然如果你如果期望 完全兼容 这种话, 那么就毫无意义了. 程序开发或在这个世界没有 完美 或在 完全 这样绝对毫无偏差的 存在. 你在 windows 写的一个程序, 没准在 别人 的机子上就异常 (比如说他 安装了一些系统清理的软件), 你在某个 Linux 发行版本上写了一个程序, 也许明天就 broken 了(因为发行版本升级了依赖,引入了个 bug)
KNOX
2015-10-13 15:42:51 +08:00
还在用 Eclipse ,懂了
zhenghuiy
2015-10-13 15:46:52 +08:00
闪退和异常只来自于兼容性?
allan1st
2015-10-13 15:54:11 +08:00
@jhdxr 求教原生系统 Api 有 bug 会造成闪退?能否拿出例子?
allan1st
2015-10-13 16:05:32 +08:00
一般来说大多数的 fc 其实是自己没写好,没有注意到低版本, oos 了等。你同事说的其实有点道理,只是高估了国产手机修改手机 ROM 的底线。
吐槽 eclipse 的,你们没有发现 lz 也是用 eclipse 的么?
twoyuan
2015-10-13 16:28:26 +08:00
system
2015-10-13 16:41:06 +08:00
@KNOX 他为什么呢,反正我以前用的是 android studio
system
2015-10-13 16:41:49 +08:00
@allan1st 我用的是 android studio 啊
honeycomb
2015-10-13 17:17:52 +08:00
@system

如果写了这样的程序:
1,在 Nexus/AOSP 上测试通过
2,但在某些重度更改过的衍生 Android 设备上运行出错

这往往是那些开发了“重度更改过的衍生 Android 设备”的厂商挖的坑
但是屁股还是得开发者擦

否则你的应用只能确保在哪些和 AOSP 保持相当程度一致的设备里可靠运行。
而这种(近)原生设备在国内是极少数。

如果这么做合适,那就无视“重度更改过的衍生 Android 设备”吧。

@yexm0
UC 基本上是 NDK 套了个很小的 JAVA 壳,“重度更改过的衍生 Android 设备”对 NDK 反而不太会动手脚,虽然 NDK 还是可以调用 JAVa 方法
monsoon
2015-10-13 17:33:17 +08:00
@allan1st
很多啊, 每个几十个也有个几百个, google issue 里找下很多的
https://code.google.com/p/android/issues/detail?id=188851&can=1&q=crash%20%20android%206.0&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars
https://code.google.com/p/android/issues/detail?id=189119&can=1&q=RecyclerView%20Crash&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars
就是不用什么 API 都可以 crash.

用 Eclipse 有可能说明你同事菜, 或者说明你同事没有跟上 Android 开发的步伐, 但是这跟他的观点无关.
jhdxr
2015-10-13 17:45:20 +08:00
@allan1st 上面已经有人给出很多例子了,我就不再重复了。。。另外 anr/fc 的确绝大多数是自己的锅,但 LZ 问的是闪退。。。系统的问题还是很多的。。。尤其是当你做的业务比较庞大的时候。。。
monsoon
2015-10-13 17:57:52 +08:00
如果你们厂商魔改导致 crash 例子的话, 当然很多
https://code.google.com/p/android/issues/detail?id=78377
https://code.google.com/p/android/issues/detail?id=78154
有直接被官方拒绝, 说这是厂商的锅的,让用户 workaround, 也有官方自己 workaround. 也有人作该机子对应的 Xposed 修复这个问题.

实际上很多开发并没有修过这些(估计很多人只遇到过其中的一部分), 或在知道并没有修, 或者在服务器看到了这个异常修一下. 或许很多大公司会真机测一下, 但是我并不认为这样的意义非常的大, 因为这些问题只是疑难杂症罢了.

算了, 总感觉我挺愚蠢的. 总之我想说的是 楼主的 标题是错误的, 完全兼容是不可能的. 但是我觉得很多开发者只用考虑 API 的兼容就算够了的.
总之我在想我这种自辩自答的意义何在...我太愚蠢了...总之把人生浪费在 miui 和 flyme 或者 touchwiz 上是毫无意义的.
allan1st
2015-10-13 17:58:41 +08:00
@monsoon 我之前碰到的 bug 是不少,但真没有直接在 native 层面直接 crash 的。搜了下原来有很多,是我见识少了,谢谢。
little_cup
2015-10-13 22:05:20 +08:00
@allan1st 我前段时间才遇到一个,悬浮窗里的 view 使用了 android:elevation 属性会导致 6.0 真机 crash ,模拟器正常。
ericyl
2015-10-14 13:51:14 +08:00
之前做照片功能的时候,回传的 url 是放在回传的 intent.getData()中但有几款三星的就是放在 intent.getAction()中的,这种就是在碰到的时候才能慢慢调 BUG 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/227633

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX