当前位置: 首页 > news >正文

男装商城网站建设网站建设评审验收会议主持词

男装商城网站建设,网站建设评审验收会议主持词,营销型网站模板,手机报价大全2021中关村原标题#xff1a;粉丝投稿 | 谈谈Android.mk本文由公号【你看上去真美】(微信号#xff1a;tmac_lover)粉丝投稿#xff0c;目前工作是Android系统rom定制开发#xff0c;有同行可以关注一下。1. 为什么是Android.mk不知道有没有人想过#xff0c;Android源码里为什么每个…原标题粉丝投稿 | 谈谈Android.mk本文由公号【你看上去真美】(微信号tmac_lover)粉丝投稿目前工作是Android系统rom定制开发有同行可以关注一下。1. 为什么是Android.mk不知道有没有人想过Android源码里为什么每个模块的编译文件叫Android.mk? 而不是别的什么名字呢。这是因为main.mk明确指定了以每个子目录下的Android.mk作为模块编译的起始makfile文件。[build/core/main.mk]subdir_makefiles : $(shell build/tools/findleaves.py --prune$(OUT_DIR) --prune.repo --prune.git $(subdirs) Android.mk) $(foreach mk, $(subdir_makefiles), $(info including $(mk) ...)$(eval include $(mk)))所以在Android源码里我们每次看一个模块是如何编译时总是把模块所在目录里的Android.mk作为编译的起始Makefile文件。2. 如何阅读Android.mk可能有朋友在琢磨是不是Android的编译系统重新定义了一套和GNU Makefile完全不同的规则答案是否定的。其实在编译源码时无论是直接使用make全编还是使用mmmmm命令全编译单个模块我们所遵循的原则和GNU Makefile是一模一样的最终都是使用相同的make命令所有GNU Makefile规则在Android源码里照样适用只不过Android封装了宠大且复杂的编译系统使得我们可以清晰简便的做修改。对于Android源码的build系统比较复杂涉及的知识点也相对较多这里只以Android.mk作为切入点剩下的以后有机会展开由点及面对build系统熟悉起来。以Android源码里一个系统APP的Android.mk文件作为例子LOCAL_PATH: $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS : optional LOCAL_SRC_FILES : $(call all-java-files-under, src) src/com/android/music/IMediaPlaybackService.aidl LOCAL_PACKAGE_NAME : Music LOCAL_PROGUARD_FLAG_FILES : proguard.flags include $(BUILD_PACKAGE)具体解释如下每一个Androi.mk文件都必须以定义LOCAL_PATH变量开头my-dir是由build系统定义的函数作用是返回当前Android.mk在源码中目录CLEARVARS是由build系统所定义的一个变量它的值是build/core/clear_vars.mk作用是清除很多LOCAL开头的变量但是不清理LOCAL_PATH所以你可以当include $(CLEAR_VARS)作为每个模块编译的开始。LOCAL_MODULE_TAGS用于定义当前模块在什么编译模式中被编译它的值有eng, user, tests, optional。LOCAL_PACKAGE_NAME变量指明了编译出apk的名字只有当前模块是一个应用(APP)才使用LOCAL_PACKAGE_NAME; 其余情况无论so或jar包全部都使用LOCAL_MODULE变量。LOCAL_SRC_FILES变量指明编译使用的源码文件all-java-files-under是由build系统定义的函数作用是列出指定目录下所有的java文件。LOCAL_PROGUARD_FLAG_FILES指定混淆文件上例中表明当前目录下proguard.flags作为混淆文件。BUILD_PACKAGE也是由build系统定义的一个变量值是build/core/package.mk, 表示编译出一个apk文件。一般来讲类似include $(BUILD_PACKAGE)可以作为一个模块编译的结束。和BUILD_PACKAGE变量类似的还有好几个这里列出其中常见的一部分BUILD_JAVA_LIBRARY — build/core/java_library.mk; 表示编译一个jar包, 里面是DEX格式的文件BUILD_STATIC_JAVA_LIBRARY – build/core/static_java_library.mk; 也编译一个jar包但是里面每个java文件所对应的class文件都存在BUILD_EXECUTABLE — build/core/executable.mk; 编译一个可执行的bin程序BUILD_PREBUILT — build/core/prebuilt.mk用于集成第三方的jar包或者so库等3. 常见变量LOCAL_STATIC_JAVA_LIBRARIES/LOCAL_JAVA_LIBRARIES - 指明编译当前模块所依赖的jar包LOCAL_CERTIFICATE : platform - 指明使用platform key来对当前模块进行签名LOCAL_AAPT_FLAGS - Android源码里使用aapt打包jar包或apk文件这个变量可以定义aapt打包参数比如 —auto-add-overlay —extra-packagesLOCAL_PROGUARD_ENABLED - 是否进行混淆4. 调试手段我们调试代码的时候最常用的手段就是打log, 在不明白的地方或者不知道走了哪个if分支或者想看看变量的值是什么都可以打log看。Android build系统里也可以打Log使用函数warning / info / error。需要注意的是error函数会让编译直接停下来所以一般用warning和info使用示例(以warning为例其它两个类似)打印普通字符串(hello world)$(warning hello world)打印变量的值$(warning $(LOCAL_PACKAGE_NAME))变量和字符串组合打印:$(warning thisapk is $(LOCAL_PACKAGE_NAME))下面以一个真实的App编译为例在这个Android.mk里可能我不知道PLATFORM_VERSION的值所以我不知道它会不会进ifeq语句这时打个log, 编译一下include $(CLEAR_VARS)... ...$(warning tmac_lover $(PLATFORM_VERSION))ifeq ($(PLATFORM_VERSION), 6.0) LOCAL_STATIC_JAVA_LIBRARIES upgrade_httpclientendif... ...include $(BUILD_PACKAGE)使用mm -B命令编译apk, 从编译输出中可以看到下面这些6.0就是PLATFORM_VERSION的值。packages/apps/TVUpdate/Android.mk:29: tmac_lover 6.0完。本公号介绍责任编辑
http://www.zqtcl.cn/news/566407/

相关文章:

  • 祭祖网站怎么做咨询类网站开发的意义
  • 简书网站开发热门电影推荐
  • 中学教材数字化学习资源的建设——教材配套网站的设计及发展趋势建网站 发信息 做推广
  • 怎么写网站建设方案书制做网站的公司
  • 服务网站 建设原则游戏服务器租用多少钱一年
  • 软件网站下载现在出入深圳最新规定
  • 长宁专业网站制作公司陕西网站建设哪家专业
  • 重庆做的好的房产网站衡水的网站建设
  • 宜春网站开发网页编辑器安卓版
  • 网站建设外包兼职建设工程合同可以分为
  • 我国网络营销现状分析重庆网站seo营销模板
  • 深圳建站公司网站免费推广预期效果
  • html5 国外网站后台网站要做权限前端还是后台做
  • 免费建自己的网站网站标题 关键词 描述之间的关系
  • 提供响应式网站建设wordpress怎么做背景图片
  • 相亲网与做网站做网站的目的与意义
  • 做网站字体大小网站建设是属于虚拟产品吗
  • 网站的内链怎么做校园网建设网站特色
  • 优化网站标题企业的网站一般做哪些维护
  • 聊天网站备案南阳定制网站制作价格低
  • 广州镭拓科技网站建设公司长春招聘
  • 视频网站app怎么做跨境贸易电子商务服务平台
  • 丽水网站seo餐饮vi设计案例
  • 娄底网站建设报价山东省住房和建设厅注册中心网站
  • 公司网站建设工作重点网站建设吉金手指专业11
  • vue做前台网站怎么做钓鱼网站吗
  • 个人建设网站如何定位烟台h5网站开发
  • 广州网站定制多少钱html5游戏开发
  • 使用angularjs的网站域名怎么解析到服务器
  • 地方门户网站盈利模式宝塔 wordpress