方法一:

  1. 在packages/apps下面以需要预置的APK名字创建文件夹,以预置一个名为Test的APK为例
  2. 将Test.apk放到packages/apps/Test下面
  3. 在packages/apps/Test下面创建文件Android.mk,文件内容如下:
 include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := Test
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_PREBUILT_JNI_LIBS := \
@lib/armeabi/libtest.so \
@lib/armeabi/libtest2.so
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

LOCAL_PREBUILT_JNI_LIBS中列出APK文件中的so文件,注意路径与APK保持一致。 
如果so文件是32位,而源码是针对64机器的,那么还需要在Android.mk文件中加上LOCAL_MULTILIB := 32。 
在APK文件的当前目录,执行mm命令编译当前模块,APK文件和so文件会分别安装到out/target/product/xxx/system/app/Test/out/target/product/magc6735_66t_l1/system/app/MonitorS09/lib/arm。然后在项目根目录使用make snod命令重新打包system.img即可。

4. 如果重新build整个工程时需要包含该Test模块,打开文件device\mediatek\common\device.mk,将Test添加到PRODUCT_PACKAGES里面。PRODUCT_PACKAGES += Test

注:如果APP使用System Level的permission,需要预置到/system/priv-app底下(原在/system/app)。修改Android.mk,增加LOCAL_PRIVILEGED_MODULE := true,以声明app需要放在/system/priv-app下。

方法二:

下面的脚本是内置搜狗输入法的一个例程。该apk含有三个so文件,分别是:libhanvonhw_v39.so、libsogouime_jni_v39.so、libthemeextractor_v39.so。

其中Android.mk内容如下:

 LOCAL_PATH := $(call my-dir)  

 include $(CLEAR_VARS)  

 # Module name should match apk name to be installed
LOCAL_MODULE := SogouInput LOCAL_MOUDLE_TAGS := optional LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := PRESIGNED LOCAL_REQUIRED_MODULES := \
libhanvonhw_v39 \
libsogouime_jni_v39 \
libthemeextractor_v39 include $(BUILD_PREBUILT) #########################################
include $(CLEAR_VARS) LOCAL_PREBUILT_LIBS := libhanvonhw_v39.so LOCAL_MODULE_TAGS := optional include $(BUILD_MULTI_PREBUILT)
#########################################
include $(CLEAR_VARS) LOCAL_PREBUILT_LIBS := libsogouime_jni_v39.so LOCAL_MODULE_TAGS := optional include $(BUILD_MULTI_PREBUILT)
#########################################
include $(CLEAR_VARS) LOCAL_PREBUILT_LIBS := libthemeextractor_v39.so LOCAL_MODULE_TAGS := optional include $(BUILD_MULTI_PREBUILT)
##########################################

最后,不要忘记在$(ANDROID_ROOT)/build/target/product/common.mk里将SogouInput模块加入到PRODUCT_PACKAGES := 里。

Android源码中内置包含so文件的APK文件的更多相关文章

  1. android studio应用修改到android源码中作为内置应用

    1. 方法一:导入,编译(太麻烦,各种不兼容问题) android studio和eclipse的应用结构目录是不同的,但是在android源码中的应用基本上都是使用的eclipse目录结构(在/pa ...

  2. MyBatis 源码分析 - 内置数据源

    1.简介 本篇文章将向大家介绍 MyBatis 内置数据源的实现逻辑.搞懂这些数据源的实现,可使大家对数据源有更深入的认识.同时在配置这些数据源时,也会更清楚每种属性的意义和用途.因此,如果大家想知其 ...

  3. Android源码中的FLAG为何使用16进制

    1.在阅读源码的时候经常发现有一些标志属性使用一些位操作来判断是否具有该标志,增加标志或者去除标志. 比如View.java中的 /** * This view does not want keyst ...

  4. 在Android源码中查找Java代码中native函数对应的C++实现

    Android源码中很多关键代码都是C++实现的,java通过jni来调用,经常会看到java中这样的代码: static native Thread currentThread(); 如何根据方法名 ...

  5. Android源码中添加APP

    参考罗升阳<Android系统源代码情景分析> 在Android源码中,我们通常把实验性质的Android APP放在packages/experimental目录下.对于一个简单的应用程 ...

  6. Eclipse与Android源码中ProGuard工具的使用

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

  7. 关于android源码中的APP编译时引用隐藏的API出现的问题

    今天在编译android源码中的计算器APP时发现,竟然无法使用系统隐藏的API,比如android.os.ServiceManager中的API,引用这个类时提示错误,记忆中在android源码中的 ...

  8. 访何红辉:谈谈Android源码中的设计模式

    最近Android 6.0版本的源代码开放下载,刚好分析Android源码的技术书籍<Android源码设计模式解析与实战>上市,我们邀请到它的作者何红辉,来谈谈Android源码中的设计 ...

  9. Eclipse与Android源码中ProGuard工具的使用(代码混淆)

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

随机推荐

  1. MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码

    前言 经过前面EF的<第一篇>与<第二篇>,我们的数据层功能已经较为完善了,但有不少代码相似度较高,比如负责实体映射的 EntityConfiguration,负责仓储操作的I ...

  2. ASP.NET Core中的依赖注入(5):ServicePrvider实现揭秘【补充漏掉的细节】

    到目前为止,我们定义的ServiceProvider已经实现了基本的服务提供和回收功能,但是依然漏掉了一些必需的细节特性.这些特性包括如何针对IServiceProvider接口提供一个Service ...

  3. 这算是ASP.NET MVC的一个大BUG吗?

    这是昨天一个同事遇到的问题,我觉得这是一个蛮大的问题,而且不像是ASP.NET MVC的设计者有意为之,换言之,这可能是ASP.NET MVC的一个Bug(不过也有可能是保持原始请求数据而作的妥协). ...

  4. 窥探Swift之基本数据类型

    在上一篇博客“窥探Swift编程之在Playground上尽情的玩耍”中介绍了如何使用Playground来学习Swift语言.本篇博客就使用Playground来窥探Swift语言.千里之行始于足下 ...

  5. spring源码分析之spring-core-env

    看一下源码整体: 抓住主要点,Environment.PropertyResolver.PropertySource,其结构如下: 其中, Environment:Interface represen ...

  6. 用jekyll制作高大上的网站(一)——安装与配置

    很多人会制作自己的主页,页面美观简洁,一直很在意是怎么做的. 最近公司需要做个文档库的主页,就研究了一些开源的工具,后面发现了jekyll(读杰克尔),将纯文本转换为静态博客网站. 一.Ruby je ...

  7. MyEclipse打不开jsp文件 报错“Failed to create the part's controls"

    本来写好了一套网站html代码,需要移植到myeclipse的jsp页面中,当复制代码完毕后,也是可以运行的并不报错,但一直有弹框提示有空指针,当关闭页面后再次打开就歇菜了,提示 我预感到这可能是my ...

  8. VS Code - Debugger for Chrome调试JavaScript的两种方式

    VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...

  9. Android 短信监听及用途分析

    监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的. Android 监听系统短信有什么用? 1.对系统 ...

  10. AJAX 详解注释很全来自互联网

    1: //用户名校验的方法 2: //这个方法使用XMLHTTPRequest对象进行AJAX的异步数据交互 3: var xmlhttp; 4: function verify(){ 5: //1. ...