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

弱弱的问一句做 Android 系统开发的

  •  1
     
  •   thinkloki · 2017-02-22 14:16:45 +08:00 · 10685 次点击
    这是一个创建于 2860 天前的主题,其中的信息可能已经有所发展或是发生改变。

    做系统做 ROM 的遇到那些隐藏的 API 怎么改?特别是像系统设置这种东西,感觉改起来好难呀。编译的时候编译不过去,还有 @hide 这种方法必须用到的需要怎么做。

    22 条回复    2017-02-26 09:45:24 +08:00
    scys
        1
    scys  
       2017-02-22 14:57:46 +08:00
    我只是用过 MTK 范畴的 ROM ,@hide 是不公开的 API ,你直接改代码就行。
    如果你修改了 @hide ,就需要提供 SDK 出去给别人编译 APK 用。
    thinkloki
        2
    thinkloki  
    OP
       2017-02-22 15:16:44 +08:00
    @scys 我就是自己要做一个系统的设置,里面用到了好多调用 @hide 的方法,每次都编译 sdk 去掉 @hide 这样去用,但有时候还是有一些东西没法用到,现在是想搭个环境能用源代码里面的所有方法,这样开发起来简单很多。
    scys
        3
    scys  
       2017-02-22 15:19:43 +08:00
    你将你代码放在系统内一起编译,就可以用到 hide 的 API
    thinkloki
        4
    thinkloki  
    OP
       2017-02-22 15:29:54 +08:00
    @scys 嗯 这种我知道的,就是开发的时候特别不方便,导包什么的这种,都是一个窗口开源码一个窗口开 IDE ,也不知道自己写对了没,也没办法验证。

    还有大佬我问个问题。我把 @hide 给删掉之后,自己编译 sdk 老是抱 make: *** [out/target/common/docs/api-stubs-timestamp] Error 45 这个错误,您遇到过没有。
    scys
        5
    scys  
       2017-02-22 16:03:10 +08:00
    make update-api
    需要更新 API 的列表
    Vindroid
        6
    Vindroid  
       2017-02-22 16:03:54 +08:00
    改这种,我向来是凭直觉改,导入的包各种红叉,没法很好的判断改没改对,改一点编译一点看有没有问题
    thinkloki
        7
    thinkloki  
    OP
       2017-02-22 16:25:35 +08:00
    @scys 我前两天 make update-api 也保这个错误 make: *** [out/target/common/docs/api-stubs-timestamp] Error 45 。
    thinkloki
        8
    thinkloki  
    OP
       2017-02-22 16:26:27 +08:00
    @Vindroid 我也差不多,感觉好麻烦。不知道那些个 ROM 大厂怎么做的。
    LancerXin
        9
    LancerXin  
       2017-02-22 16:47:11 +08:00
    大厂的 rom,系统内部大多数 app 一般都是用 ide 编译出来的,他们会修改 sdk 添加自己的 android.jar,这里面方法没有 hide 的,而且包含所有 internal 的类和方法.
    这样做的好处很明显,就是只需要招应用开发的人才就可以了.
    这种做法类似 aosp 和 gms 的关系,gms 是预编译好的.

    其实你自己也可以编译自己的 sdk,方法我不多说了,楼上很多都说了.
    scys
        10
    scys  
       2017-02-22 16:47:48 +08:00
    根据你回复的 Error 45 你只有慢慢细查或者上网查,没头绪
    thinkloki
        11
    thinkloki  
    OP
       2017-02-22 16:55:13 +08:00
    @LancerXin 我现在就是自己在编译 SDK ,现在要用到 internal 里面的方法,也是没头绪。
    thinkloki
        12
    thinkloki  
    OP
       2017-02-22 16:55:34 +08:00
    @scys 我在复现一遍 等会把详细的 log 贴出来。
    thinkloki
        13
    thinkloki  
    OP
       2017-02-22 16:57:23 +08:00
    @scys 原来 5.1 得源码编译 sdk 没问题,换了个版本 4.4.4 就出现这个问题,就是去掉了 @hide 。不去掉 @hide 是没问题的。
    scys
        14
    scys  
       2017-02-22 17:14:10 +08:00
    4.4.4 -_- 又是另外一个编译方法,你还是不要去掉 @hide ,修改一个公开的 API ,提供相同功能
    thinkloki
        15
    thinkloki  
    OP
       2017-02-22 17:20:33 +08:00
    @scys 4.4.4 的命令还跟别的版本命令不一样?
    . build/envsetup.sh
    lunch sdk-eng
    make sdk-j4
    上面这个命令试过,去掉 @hide 报 Error 45

    . build/envsetup.sh
    lunch sdk-eng
    make PRODUCT-sdk-sdk
    这个也试过,一样的问题。
    jokerman
        16
    jokerman  
       2017-02-22 17:21:07 +08:00
    反射
    thinkloki
        17
    thinkloki  
    OP
       2017-02-22 17:25:01 +08:00
    ![]( ) @scys 就是这个就是我把 forget 上面的 @hide 去掉了然后就报这个错误。还有如果我用到 internal 类里面的方法,比如说 Phone ,我直接源码编译能用到吗?
    thinkloki
        18
    thinkloki  
    OP
       2017-02-22 17:29:11 +08:00
    @jokerman 反射如果代码多的话很不方便,代码少还行。
    scys
        19
    scys  
       2017-02-22 18:58:54 +08:00
    刚好今天也遇到,不过你那个仅仅因为你 @hide 里面也用了 @hide 的属性罢了。
    thinkloki
        20
    thinkloki  
    OP
       2017-02-22 19:05:19 +08:00
    @scys ![]( ) 是这个 ActionListener 呢吗?把这个得 @hide 也去掉?
    thinkloki
        21
    thinkloki  
    OP
       2017-02-23 10:21:30 +08:00
    已经解决了确实是 @hide 去掉的时候,相关联的参数里面也有 @hide 得问题导致的,包括 @LINK 这种也会产生异常。简单粗暴把所有的 @符号相关的东西删完就行了。
    coolypf
        22
    coolypf  
       2017-02-26 09:45:24 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1215 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:40 · PVG 01:40 · LAX 09:40 · JFK 12:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.