一,如何把app编进系统

a.源码编译,在packages/apps目录下有安卓原生的app,以Bluetooth为例,源码根目录下有Android.mk文件:

packages\apps\Bluetooth

  1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)
  3. #负责清理除LOCAL_PATH外的其他LOCAL_XXX,这个清理动作是必须的,因为所有的编译控制文件由同一个GNU  Make解析和执行,
  4. #其变量是全局的。所以清理后才能避免相互影响。
  5. LOCAL_MODULE_TAGS := optional
  6. LOCAL_SRC_FILES := \
  7. $(call all-java-files-under, src)
  8. LOCAL_PACKAGE_NAME := Bluetooth
  9. LOCAL_CERTIFICATE := platform
  10. #使用系统签名
  11. LOCAL_JNI_SHARED_LIBRARIES := libbluetooth_jni
  12. LOCAL_JAVA_LIBRARIES := javax.obex telephony-common mms-common
  13. LOCAL_STATIC_JAVA_LIBRARIES := com.android.vcard
  14. LOCAL_JAVA_LIBRARIES += com.broadcom.bt
  15. LOCAL_REQUIRED_MODULES := libbluetooth_jni bluetooth.default
  16. LOCAL_PROGUARD_ENABLED := disabled
  17. #不使用代码混淆的工具进行代码混淆,不设置则默认值为full,即将该工程代码全部混淆
  18. include $(BUILD_PACKAGE)
  19. include $(call all-makefiles-under,$(LOCAL_PATH))

在packages\apps\Bluetooth下mm,可单独编译,在\out\target\product\xxx\system\app下会生成Bluetooth.apk。

然后修改build下的mk文件,增加蓝牙模块,这样在源码根目录下执行make就会编译到Bluetooth模块

\build\target\product\generic_no_telephony.mk

  1. PRODUCT_PACKAGES := \
  2. DeskClock \
  3. Bluetooth \     #增加蓝牙模块
  4. Calculator \

b.apk编译,针对没有源码的第三方apk,修改Android.mk:

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. # Module name should match apk name to be installed
  4. LOCAL_MODULE := Animation
  5. LOCAL_MODULE_TAGS := optional
  6. LOCAL_SRC_FILES := Animation.apk
  7. LOCAL_MODULE_CLASS := APPS
  8. LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
  9. LOCAL_CERTIFICATE := PRESIGNED
  10. include $(BUILD_PREBUILT)

还需要修改device.mk:

  1. PRODUCT_PACKAGES +=\
  2. PackageInstallerRenew\
  3. Video\
  4. TlrService\
  5. Animation\   #添加Animation模块

二,如何删除app,使当前app不会编进系统

在packages/apps目录下有安卓原生的app,有一些app是不需要的。

LOCAL_PACKAGE_NAME    packages\apps\Bluetooth\Android.mk

  1. LOCAL_SRC_FILES := \
  2. $(call all-java-files-under, src)
  3. LOCAL_PACKAGE_NAME := Bluetooth5   #将Bluetooth重命名为Bluetooth5。也可更改generic_no_telephony.mk
  4. #保证和generic_no_telephony.mk增加的模块名字不一致即可
  5. LOCAL_CERTIFICATE := platform

特别注意,有的模块不一定在generic_no_telephony.mk中增加,可通过find . -name "*.mk" | xargs grep "Bluetooth"来查看在哪个mk里面声明了。由于大部分企业都没有统一的管理规范,一个模块有时候会在多个mk中增加,所以最快的方式就是更改packages\apps\Bluetooth\Android.mk的LOCAL_PACKAGE_NAME ,或者置空。

Android之APP模块编译的更多相关文章

  1. Android 引入外部模块编译选择

    /********************************************************************************* * Android 引入外部模块编 ...

  2. Android之源码之模块编译和调试

    Android之源码之模块编译调试 (一) 进行源码模块修改进行编译的调试 1.首先是从git或者svn上拉一套完整的工程下来,然后全编一下,一般这个时间比较长,大概会得2,3个小时左右, 2,编译成 ...

  3. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  4. [Android Pro] 自己动手编译Android源码(超详细)

    cp from : https://www.jianshu.com/p/367f0886e62b 在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈andro ...

  5. 【Android】1.0 第1章 C#之Android手机App开发

    分类:C#.Android.VS2015:创建日期:2016-01-20 目前Android在全世界市场上大约有75%的占有率,国人Android手机的持有比例更甚,甚至达到90%以上.因此搞计算机的 ...

  6. 爱了,字节跳动大神最佳整理:582页Android NDK七大模块学习宝典,理论与实践

    前言 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,而且薪资水涨船高,以一线城市为例,音视频工程开发的薪资比Android应用层开发高出40%. 但 ...

  7. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  8. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. ------------------------------------- ...

  9. Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境

    引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...

随机推荐

  1. ELK之收集Nginx、Tomcat的json格式日志

    1.安装Nginx yum -y install nginx vim /etc/nginx/nginx.conf # 修改日志格式为json格式,并创建一个nginxweb的网站目录 log_form ...

  2. 基于centos 创建stress镜像——源码安装stress

    上一篇文章进行了yum安装stress,这次对stress进行源码编译安装,并且生成新的镜像 创建Dockerfile目录 [vagrant@localhost ~]$ mkdir -p /tmp/s ...

  3. 传奇的诞生,PHP三位创始人简介

    PHP到现在为止已经诞生12年了.在这期间它经过不断改善,已经成为Web开发最重要的语言之一.PHP能有今天这样的成就,它的3位创始人(Rasmus Lerdorf.Zeev Suraski和Andi ...

  4. Razor视图引擎布局 Razor视图引擎的基本概念与法语 SQL Server Mobile 和 .NET 数据访问接口之间的数据类型映射 binary 和 varbinary datetime 和 smalldatetime float 和 real

    Razor视图引擎布局   不需要像过去aspx一样,使用.Master文件,而是统一使用.cshtml 或 .vbhtml文件.但文件名一般以 _开头,这样做文件不会当做View显示出来 使用@Re ...

  5. C# json反序列化 对象中嵌套数组 (转载) 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

    C# json反序列化 对象中嵌套数组 (转载)   看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的   Newtonso ...

  6. iOS开发核心语言Objective C —— 全部知识点总结

    本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...

  7. struts2_13_OGNL表达式

    全称:Object Graphic Navigation Language(对象图导航语言)是一个开源项目,是Struts2框架的默认表达式语言. 相对于EL表达式.它提供了平时我们须要的一些功能,如 ...

  8. RecyclerViewDemo

    https://github.com/eltld/RecyclerViewDemo

  9. Mysql中show processlist结果中的status状态总结

    一 般情况下,DBA能从监控mysql的状态列表中查看出数据库的运行端倪,需要注意的是STATUS所表示的不同内容.且需要注意的是TIME字段表示的 意思.它表示的只是最后那个STAT状态持续的时间. ...

  10. 常用SQL备忘录

    联表删除: delete t1,t2 from table_name t1 left join t2 on t1.id=t2.id where t1.id=23 (ps:该语句在mysql 5.0之前 ...