请问如何单独编译frameworks下的某个模块?

Michael_ee 2011-08-24 04:19:12
比如,我只在frameworks\base\services\java\com\android\server\inputManager.java中的

public VirtualKeyDefinition[] getVirtualKeyDefinitions(String deviceName) 函数中第一加了一条调试语句:

try {
Slog.i(TAG, "Begin get Virtualkey!");

FileInputStream fis = new FileInputStream(
"/sys/board_properties/virtualkeys." + deviceName);
...................

该如何编译?需要用:make TARGET_PRODUCT= <product name> OMAPES=5.x -j8
编译整个android 文件系统么?

如果编译好了单个模块,是否直接放在对应文件系统目录下就行了?


...全文
6077 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu071011 2014-05-08
  • 打赏
  • 举报
回复
我是直接在源码更目录下: . build/envent.sh lunch X 然后直接make framework...... 就好了。
袁保康 2013-08-05
  • 打赏
  • 举报
回复
引用 14 楼 t339402908 的回复:
[quote=引用 13 楼 wxy5498556 的回复:] 同样的问题,在编译framework时报错误: No rule to make target `out/target/product/generic/system/framework/framework-res.apk', needed by `out/target/product/generic/system/framework/framework.jar'.
出现这个错误的解决办法: 1.先在framework/base目录下执行 mmm core/res/ 生成framework-res.apk 2.接着在framework/base下继续执行 mm -B 即可生成Install: out/target/product/generic/system/framework/framework.jar [/quote] 解决了我的问题,不过我简化了一下: mmm frameworks/base/core/res/ mmm frameworks/base/
泡泡唐 2013-05-28
  • 打赏
  • 举报
回复
引用 13 楼 wxy5498556 的回复:
同样的问题,在编译framework时报错误: No rule to make target `out/target/product/generic/system/framework/framework-res.apk', needed by `out/target/product/generic/system/framework/framework.jar'.
出现这个错误的解决办法: 1.先在framework/base目录下执行 mmm core/res/ 生成framework-res.apk 2.接着在framework/base下继续执行 mm -B 即可生成Install: out/target/product/generic/system/framework/framework.jar
jiedi002 2012-05-22
  • 打赏
  • 举报
回复
同样的问题,在编译framework时报错误:
No rule to make target `out/target/product/generic/system/framework/framework-res.apk', needed by `out/target/product/generic/system/framework/framework.jar'.
cyy_xiong 2011-12-31
  • 打赏
  • 举报
回复
同样的问题。
lvxin707 2011-11-10
  • 打赏
  • 举报
回复
lx@lx-desktop:~/administrator/source_code/qct/DataDisk/U7702/Linux/frameworks/base$ mm
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.4
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GINGERBREAD
============================================
find: `frameworks/base/frameworks/base/docs/html': No such file or directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or directory
find: `out/target/common/docs/gen': No such file or directory
find: `frameworks/base/frameworks/base/docs/html': No such file or directory
find: `out/target/common/docs/gen': No such file or directory
make: Entering directory `/home/lx/administrator/source_code/qct/DataDisk/U7702/Linux'
Copying: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/emma_out/lib/classes-jarjar.jar
make: *** No rule to make target `out/target/product/generic/system/framework/framework-res.apk', needed by `out/target/product/generic/system/framework/framework.jar'. Stop.
make: Leaving directory `/home/lx/administrator/source_code/qct/DataDisk/U7702/Linux'


高手解答下,为什么在编译framework源码时报 *** No rule to make target `out/target/product/generic/system/framework/framework-res.apk', needed by `out/target/product/generic/system/framework/framework.jar'.
TerryZeng98 2011-09-07
  • 打赏
  • 举报
回复
楼上童靴的方法是可以的,然后用make snod生成system.img,不过我发现如果是在
/frameworks/base/services/java# mm
然后回到根目录下 make snod生成的system.img文件比起sdk里面的system.img要小得多,加载到模拟器也是可以运行的,正在研究这个原因
fight3391 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 louiswangbing 的回复:]
引用 5 楼 fight3391 的回复:

frameworks\base\services\java\ 目录下有android.mk文件,在此目录下mm 就可以了。

这样不行的,生成的模块是framework.jar的一部分,在这里mm是不会对framework.jar重新打包的。。。改了等于没改
[/Quote]

Install: out/target/product/*****/system/framework/services.jar
编译生成的是services.jar,不属于framework.jar的,与framework.jar没有关系。然后重新生成固件就可以了。
七夜_雪 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fight3391 的回复:]

frameworks\base\services\java\ 目录下有android.mk文件,在此目录下mm 就可以了。
[/Quote]
这样不行的,生成的模块是framework.jar的一部分,在这里mm是不会对framework.jar重新打包的。。。改了等于没改
zhuangsan6875 2011-08-24
  • 打赏
  • 举报
回复
学习了
莫名的码农 2011-08-24
  • 打赏
  • 举报
回复
make services
fight3391 2011-08-24
  • 打赏
  • 举报
回复
frameworks\base\services\java\ 目录下有android.mk文件,在此目录下mm 就可以了。
BadPattern 2011-08-24
  • 打赏
  • 举报
回复
直接进入到源码目录下的framework/base目录,执行mm(需要在源码目录下执行. build/envsetup.sh否则找不到命令),然后把编译出来的framework.jar替换掉你的android设备里边的/system/framework下的对应文件就行,不需要完整编译。
楼主,不结贴不厚道啊!
七夜_雪 2011-08-24
  • 打赏
  • 举报
回复
可以重新编译framework模块,如果是文件系统的话;
如果要打包成system.img的话,再make snod一下就行了
儿大不由爷 2011-08-24
  • 打赏
  • 举报
回复
系统的可能你还没权限修改呢
fontlose 2011-08-24
  • 打赏
  • 举报
回复
Android中的一个应用程序可以单独编译,编译后要重新生成system.img
在源码目录下执行
. build/envsetup.sh 就多出一些命令:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.

我们可以使用mmm来编译指定目录的模块,如编译联系人:
mmm packages/apps/Contacts/
或cd 至packages/apps/Contacts/
使用mm命令,可以使用make snod重新生成system.img

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧