Android源码中内置包含so文件的APK文件
方法一:
- 在packages/apps下面以需要预置的APK名字创建文件夹,以预置一个名为Test的APK为例
- 将Test.apk放到packages/apps/Test下面
- 在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文件的更多相关文章
- android studio应用修改到android源码中作为内置应用
1. 方法一:导入,编译(太麻烦,各种不兼容问题) android studio和eclipse的应用结构目录是不同的,但是在android源码中的应用基本上都是使用的eclipse目录结构(在/pa ...
- MyBatis 源码分析 - 内置数据源
1.简介 本篇文章将向大家介绍 MyBatis 内置数据源的实现逻辑.搞懂这些数据源的实现,可使大家对数据源有更深入的认识.同时在配置这些数据源时,也会更清楚每种属性的意义和用途.因此,如果大家想知其 ...
- Android源码中的FLAG为何使用16进制
1.在阅读源码的时候经常发现有一些标志属性使用一些位操作来判断是否具有该标志,增加标志或者去除标志. 比如View.java中的 /** * This view does not want keyst ...
- 在Android源码中查找Java代码中native函数对应的C++实现
Android源码中很多关键代码都是C++实现的,java通过jni来调用,经常会看到java中这样的代码: static native Thread currentThread(); 如何根据方法名 ...
- Android源码中添加APP
参考罗升阳<Android系统源代码情景分析> 在Android源码中,我们通常把实验性质的Android APP放在packages/experimental目录下.对于一个简单的应用程 ...
- Eclipse与Android源码中ProGuard工具的使用
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
- 关于android源码中的APP编译时引用隐藏的API出现的问题
今天在编译android源码中的计算器APP时发现,竟然无法使用系统隐藏的API,比如android.os.ServiceManager中的API,引用这个类时提示错误,记忆中在android源码中的 ...
- 访何红辉:谈谈Android源码中的设计模式
最近Android 6.0版本的源代码开放下载,刚好分析Android源码的技术书籍<Android源码设计模式解析与实战>上市,我们邀请到它的作者何红辉,来谈谈Android源码中的设计 ...
- Eclipse与Android源码中ProGuard工具的使用(代码混淆)
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...
随机推荐
- iOS开发之ImageView复用实现图片无限轮播
在上篇博客中iOS开发之多图片无缝滚动组件封装与使用给出了图片无限轮播的实现方案之一,下面在给出另一种解决方案.今天博客中要说的就是在ScrollView上贴两个ImageView, 把ImageVi ...
- ZOJ Problem Set - 1240 IBM Minus One
水题不解释,就是注意下格式,没输出一行字符串记得加一个空白行 #include <stdio.h> #include <string.h> int main() { ; ]; ...
- 数据库操作提示:Specified key was too long; max key length is 767 bytes
操作重现: 法1:新建连接——>新建数据库——>右键数据库导入脚本——>提示:Specified key was too long; max key length is 767 by ...
- VS Extract Method
前言 看重构6.4Replace Temp with Query(以查询取代临时变量)中提到Replace Temp with Query往往是你运用Extract Method之前必不可少的一个步骤 ...
- Moon.Orm版本维护及下载(跟踪报道)
提示:最下面有最新的下载地址 历史记录: ).-- :: 支持Mysql,Sqlserver(点击下载) ).2013年9月14日,代码重构,加入oracle.复合主键功能(点击下载) )--,为d ...
- 获取linux服务器基本信息脚本
为了方便日常运维写的一段简单脚本,用于集中获取服务器操作系统.CPU.内存使用.负载.硬盘使用.网络信息. 脚本比较简单,就不解释了,有兴趣的朋友请自行查看. #!/bin/bash##Name:sy ...
- NoSQL
Not Only Sql,弱一致性模型,非关系型.分布式.支持水平扩展的数据库设计模式,区别于传统关系型数据库严格的事务一致性和范式约束.分布式缓存是NoSQL一种实现形式. 参考:
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
经常会用到 网络文件 比如查看大图片数据 资源优化的问题,当然用开源的项目 Android-Universal-Image-Loader 或者 ignition 都是个很好的选择. 在这里把原来 ...
- .NET跨平台之Sake和KoreBuild
最近在了解Asp.net Core 1.0(也可称为Asp.net5\Asp.net vNext)的跨平台,发现了两个新的新东西:Sake和KoreBuild(或者已经出了很久). 通过国内某度查询资 ...
- java堆和栈的区别
java 的内存分为两类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这 ...