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

2017-02-22 14:16:45 +08:00
 thinkloki

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

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

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

其实你自己也可以编译自己的 sdk,方法我不多说了,楼上很多都说了.
scys
2017-02-22 16:47:48 +08:00
根据你回复的 Error 45 你只有慢慢细查或者上网查,没头绪
thinkloki
2017-02-22 16:55:13 +08:00
@LancerXin 我现在就是自己在编译 SDK ,现在要用到 internal 里面的方法,也是没头绪。
thinkloki
2017-02-22 16:55:34 +08:00
@scys 我在复现一遍 等会把详细的 log 贴出来。
thinkloki
2017-02-22 16:57:23 +08:00
@scys 原来 5.1 得源码编译 sdk 没问题,换了个版本 4.4.4 就出现这个问题,就是去掉了 @hide 。不去掉 @hide 是没问题的。
scys
2017-02-22 17:14:10 +08:00
4.4.4 -_- 又是另外一个编译方法,你还是不要去掉 @hide ,修改一个公开的 API ,提供相同功能
thinkloki
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
2017-02-22 17:21:07 +08:00
反射
thinkloki
2017-02-22 17:25:01 +08:00
![]( ) @scys 就是这个就是我把 forget 上面的 @hide 去掉了然后就报这个错误。还有如果我用到 internal 类里面的方法,比如说 Phone ,我直接源码编译能用到吗?
thinkloki
2017-02-22 17:29:11 +08:00
@jokerman 反射如果代码多的话很不方便,代码少还行。
scys
2017-02-22 18:58:54 +08:00
刚好今天也遇到,不过你那个仅仅因为你 @hide 里面也用了 @hide 的属性罢了。
thinkloki
2017-02-22 19:05:19 +08:00
@scys ![]( ) 是这个 ActionListener 呢吗?把这个得 @hide 也去掉?

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

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

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

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

© 2021 V2EX