V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
system
V2EX  ›  Android

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

  •  
  •   system · 2015-10-13 12:28:19 +08:00 · 7615 次点击
    这是一个创建于 3119 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    37 条回复    2015-10-14 13:51:14 +08:00
    kaedea
        1
    kaedea  
       2015-10-13 12:52:59 +08:00   ❤️ 1
    你写着 Android 的应用,却放到 Flyme 、 Miui 等系统上去运行,你能指望他完全兼容嘛?
    Bown
        2
    Bown  
       2015-10-13 12:53:13 +08:00   ❤️ 1
    Api Level 兼容保证的只是不会抛 NoSuchMethod 这类异常,然而还有大量奇奇怪怪的 bug 出现在各种第三方 ROM 上, MIUI 、 Flyme 坑了多少开发者
    system
        3
    system  
    OP
       2015-10-13 12:53:58 +08:00
    不同厂家机型不用考虑吗?
    system
        4
    system  
    OP
       2015-10-13 12:54:47 +08:00
    @kaedea
    @Bown
    同事非要说不用考虑厂家机型,只考虑 API
    lincanbin
        5
    lincanbin  
       2015-10-13 12:56:40 +08:00 via Android   ❤️ 2
    傻孩子,你没用过魅族吗?
    system
        6
    system  
    OP
       2015-10-13 12:57:06 +08:00
    @Bown
    @kaedea
    同事说:不同厂家只是界面不一样而已,没听说过还要兼容他们的机子, Google 的 API 已经做好了兼容性,按 Google 的 API 兼容说明就可以了。
    undownding
        7
    undownding  
       2015-10-13 13:07:48 +08:00   ❤️ 4
    傻孩子,你跟个用 eclipse 写 Android 的较什么劲。。。
    kaedea
        8
    kaedea  
       2015-10-13 13:16:46 +08:00
    >同事说:不同厂家只是界面不一样而已,没听说过还要兼容他们的机子

    不怕国产机教你做人么
    Xs0ul
        9
    Xs0ul  
       2015-10-13 13:20:33 +08:00   ❤️ 1
    @system 很多 API 是要有 Google 服务的吧?国产机会教做人的
    system
        10
    system  
    OP
       2015-10-13 13:24:24 +08:00
    @undownding 嗯!!!
    learnshare
        11
    learnshare  
       2015-10-13 13:28:32 +08:00   ❤️ 1
    遵循官方指导,在 Nexus 上测试。这样基本上可以兼容主流机型。
    nekoyaki
        12
    nekoyaki  
       2015-10-13 13:35:42 +08:00   ❤️ 1
    小米、魅族好多东西都要专门兼容。有时候三星也需要。
    yexm0
        13
    yexm0  
       2015-10-13 13:36:05 +08:00 via Android   ❤️ 1
    看你做的啥软件咯,像浏览器这类的例如 2.3 年代开发的 uc7.9 ,到现在 6.0 了照样能正常使用。
    wy315700
        14
    wy315700  
       2015-10-13 13:37:27 +08:00   ❤️ 2
    你除以 0 试试看会不会闪退
    ssynhtn
        15
    ssynhtn  
       2015-10-13 13:39:39 +08:00   ❤️ 1
    基本上你同事是对的。
    第三方 ROM 会有一些行为上的区别,但是一般不会有异常的
    ssynhtn
        16
    ssynhtn  
       2015-10-13 13:41:57 +08:00   ❤️ 1
    @Xs0ul Google 的 API 国内的 app 也不会去用啊
    mio4kon
        17
    mio4kon  
       2015-10-13 13:42:17 +08:00   ❤️ 1
    imn1
        18
    imn1  
       2015-10-13 13:49:12 +08:00   ❤️ 1
    总结一下上面的回复就是:虽然 @system 只有一个,但 system 还是有很多个的
    jhdxr
        19
    jhdxr  
       2015-10-13 13:54:59 +08:00   ❤️ 1
    你和没做过适配的人叫神马劲。。。就算是谷歌自己的亲儿子, google 自己的 API 也有 bug ,照样闪退啊
    ibremn
        20
    ibremn  
       2015-10-13 13:57:02 +08:00   ❤️ 1
    你同事真的是在国内做安卓开发的吗。。
    feicien
        21
    feicien  
       2015-10-13 14:05:05 +08:00   ❤️ 1
    我在开发 Android 应用的时候基本不用考虑机型的
    monsoon
        22
    monsoon  
       2015-10-13 15:08:03 +08:00   ❤️ 2
    我们觉得一些人回帖跟 LZ 的想要问的问题不一样......

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

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

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

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

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

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

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

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

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

    @yexm0
    UC 基本上是 NDK 套了个很小的 JAVA 壳,“重度更改过的衍生 Android 设备”对 NDK 反而不太会动手脚,虽然 NDK 还是可以调用 JAVa 方法
    monsoon
        32
    monsoon  
       2015-10-13 17:33:17 +08:00   ❤️ 2
    @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
        33
    jhdxr  
       2015-10-13 17:45:20 +08:00   ❤️ 1
    @allan1st 上面已经有人给出很多例子了,我就不再重复了。。。另外 anr/fc 的确绝大多数是自己的锅,但 LZ 问的是闪退。。。系统的问题还是很多的。。。尤其是当你做的业务比较庞大的时候。。。
    monsoon
        34
    monsoon  
       2015-10-13 17:57:52 +08:00   ❤️ 1
    如果你们厂商魔改导致 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
        35
    allan1st  
       2015-10-13 17:58:41 +08:00   ❤️ 1
    @monsoon 我之前碰到的 bug 是不少,但真没有直接在 native 层面直接 crash 的。搜了下原来有很多,是我见识少了,谢谢。
    little_cup
        36
    little_cup  
       2015-10-13 22:05:20 +08:00 via Android   ❤️ 1
    @allan1st 我前段时间才遇到一个,悬浮窗里的 view 使用了 android:elevation 属性会导致 6.0 真机 crash ,模拟器正常。
    ericyl
        37
    ericyl  
       2015-10-14 13:51:14 +08:00
    之前做照片功能的时候,回传的 url 是放在回传的 intent.getData()中但有几款三星的就是放在 intent.getAction()中的,这种就是在碰到的时候才能慢慢调 BUG 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2964 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:00 · PVG 21:00 · LAX 06:00 · JFK 09:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.