Android源码编译第三方app(Android studio编写项目)如何写Android.mk

android9系统android studio项目改成用android.mk编译引用v7包第三方jar包,aar文件和so库文件 android9系统android studio项目改成用android.mk编译引用v7包第三方jar包,aar文件和so库文件 原文件在:\vendor\..\package\DVR 打包apk在:\out\target\product\msm8953_64\system\app\DVR 项目放进系统中编译前提是APP 本身已能正常在对应系统中使用了,只是现在需要用mmm编译到系统包中 先用android studioMake project成功后,Clean Project项目,清.. 阅读详情


        在Android源码开发过程中,需要整合进第三方APP到系统中,作为内置应用。如果是第三方APP是以APK形式整合进项目中,那么根据平台和公司的要求,只需修改编译脚本就可以实现整合,这里不再赘述;本文讲解拿到的第三方app是源码,需要自己写android.mk文件实现编译apk功能。

       现在Android app ide主要是两个工具eclipse和android studio。Eclipse已经从google的android开发者网站中移除了下载链接,现在主流的android app开发工具就是Android studio。

        android 源码中package/app目录下的应用大部分还是eclipse的代码结构,第三方app如果是eclipse编写的,那么去源码中package/app目录下找一个应用的android.mk 类比改一下就可以。这里主要讲一下android studio 项目的android.mk怎么写。

       android studio编写的app,app源码代码结构就跟eclipse不一样,实际上有用的app目录下的内容。我的android.mk就放在app/src/main目录下(一般android.mk都放在应用目录下,但实际上android源码在编译时会遍历package/app目录下的android.mk文件,不放心可以在项目应用根目录下写android.mk)

       首先查看app/src/main目录下的build.gradle文件,在这个文件中会写明在开发中引用了哪些包,如果不是android源码中带有的(如android-support-v4,android-support-v7-xxx等),那么要去android studio的安装目录下找到这些jar包,放到app/src/main/libs/目录下(没有就自己创建一个),因为android studio在使用时会自动下载需要的包到安装目录下,所以在拿到源码时实际上这些包是没有的,在本地用android studio导入项目,它会自动联网同步这些包。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)  (经典开头两句)
LOCAL_PACKAGE_NAME := xxx(apk的名字,如果这个值写的是Test,那么编译出来的就是Test.apk)
LOCAL_CERTIFICATE := platform (系统签名)

LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
src_dirs := java/
LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
##声明使用的java文件和资源文件地址,如果使用到aidl,需要特别声明,常见写法如下
#LOCAL_SRC_FILES += \
# src/xx/xx/xx/aidl/XxxOne.aidl \
# src/xx/xx/xx//aidl/XxxTwo.aidl
LOCAL_MULTILIB := 32(添加这句是为了防止在编译后使用apk时,提示so是32位而不是64位导致应用fc)
LOCAL_PREBUILT_JNI_LIBS_x86 := jniLibs/x86/libxxx.so
LOCAL_PROGUARD_ENABLED := disabled (添加这句是为了防止在编译后使用apk时,提示找不到so库中对应的方法导致fc)
#如果使用了jni就要这么写

LOCAL_STATIC_JAVA_LIBRARIES +=  design \
                                android-support-v4 \
                                android-support-v7-appcompat \
                                android-support-v7-recyclerview \
                                recyclerview-v7 \
                                itextpdf(第三方包名)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += \
            itextpdf:libs/itextpdf-5.5.9.jar
#第三方包需要通过LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES声明

LOCAL_PROGUARD_FLAG_FILES := proguard.flags 
##在编译时如果提示包中有warning时,需要按照要求在文件中写dontwarn,proguard.flags需要自行创建,android studio不会创建这个文件

下面是我写的android.mk,以供参考:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)


LOCAL_PACKAGE_NAME := 应用名


LOCAL_CERTIFICATE := platform


#如果使用的系统的包,需要引入他们使用的资源文件,否则会提示编译资源找不到的错误
LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
LOCAL_RESOURCE_DIR += frameworks/support/v7/gridlayout/res
LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res
LOCAL_RESOURCE_DIR += frameworks/support/design/res

LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res

src_dirs := java/

LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))

#LOCAL_SRC_FILES += \
# src/xx/xx/xx/XxxOne.aidl \
# src/xx/xx/xx/XxxTwo.aidl

LOCAL_STATIC_JAVA_LIBRARIES +=  design \
                                android-support-v4 \
                                itextpdf \
                                android-support-v7-appcompat \
                                android-support-v7-recyclerview \
                                recyclerview-v7

LOCAL_PREBUILT_JNI_LIBS := jniLibs/xx/libxxx.so

LOCAL_MULTILIB := 32

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat
LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.gridlayout
LOCAL_AAPT_FLAGS += --extra-packages com.android.datetimepicker
LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview
LOCAL_AAPT_FLAGS += --extra-packages android.support.design

LOCAL_PROGUARD_ENABLED := disabled

include $(BUILD_PACKAGE)

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += \
itextpdf:libs/itextpdf-5.5.9.jar

include $(BUILD_MULTI_PREBUILT)

include $(call all-makefiles-under,$(LOCAL_PATH))




特别补充:

1.第三方APP如果使用到了design-xx.jar包中的类,编译可以通过,但是在使用时APP会出现crash问题,log反应是design中类找不到。design是android提供的jar包,出现这个问题是,要去framework/support/design/目录下执行mm编译出design对应的jar包,再编译app,这时编译出的apk就没有找不到类的异常了 

2.可以把android.mk放到应用的跟根目录下,这时候需要修改java文件,资源文件,包的引用目录地址



Android.mk 项目迁移为 Gradle 项目 本文为博主原创文章,如需转载,请在醒目位置注明出处 前言 最近在研究 Google 的 Camera2 项目,因为该项目属于 AOSP,自然也是用 Android.mk 编译的。因源码阅读不是很方便,便想着迁移至 Android Studio 中,使用 Gradle 来编译。 1. 源码下载 app framework 源码分为两部分,一部分在 pl... 阅读详情

相关推荐

Android studio调用第三方so文件(成功)

踩了很多坑,走了很长的路,网上各种各样的说法把我整得晕头转向,最终还是成功了,这里自己总结一下,也顺便分享有需要的伙伴。 如何利用ndk编译我这里就不说了。在linux中进行ndk编译:https://blog.csdn.net/FZeroTHero/article/details/89308312 在Android studio中ndk编译:https://blog.csdn.net/FZero...

FZeroTHero的博客 7173

android mk学习-使用源码编译 AndroidStudio 工程

在开发安卓app时,我们通常可以用 AndroidStudio 开发应用,然后 build apk ,以预装的方式放到源码下编译。如果需要用源码来编译 AndroidStudio 工程,该怎么做呢 ? 下面来实操学习 android Makefile 的使用。 将 AndroidStudio 工程放到源码 device/xxx/commom/apps 目录下, 8.0 的放到 vendor/xxx...

weixin_44021334的博客 1908

Android android studio 项目放在源码中编译

app中有些权限在Android studio下无法实现,如关机等,虽然配置了权限,但是还是需要app签名,因此将app直接放在 源码中进行编译 一、首先将app代码放在源码中 1.可以放在vendor 目录下自己项目的package/app/下面 2.可以放在vendor/google/partner_gms/apps 或者 vendor/mtk/qcom 等 3.也可以直接放在 package...

安卓兼职framework和app工程师的博客 1149

编写Android.mk把Android studio项目编译到AOSP源码中

前言: 在工作,我们利用Android studio开发apk是非常方便的,当我们要把工程代码放在android 源码中编译的时候,需要我们自己编写Andorid.mk 文件。以下内容是对Android.mk文件中的代码 解释说明。 Android.mk 编写: #每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件 LOCAL_PATH := $(call my-dir) #CLEAR_VARS 变量由Buil.......

u012514113的专栏 7139

Android Studio 编译系统源码

环境配置 & 下载 参考文章 官方文档 湫水blog 清华镜像 调试 以下所有操作在mac上进行推荐下载 7.0及以上系统!!! 1.创建磁盘映像(80G)$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/android.dmg 2.安装MacPorts (类似brew

sinat_24196195的博客 2508

Android 11.0 12.0添加自定义服务,并生成jar给第三方app调用

在11.0定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,上层通过调用服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar 给上层app调用 从而来实现所需要的功能 第一步: 添加自定义服务 1.创建aidl 2.在frameworks\base\Android.bp中添加我们的AIDL,让其编译进系统 3.在frameworks\base\services\core\java\com\android\server\下创建自己的文件夹lgy,并创建自己的service 4.在fr

安卓兼职framework和app工程师的博客 3407

将 Android Studio 的项目放入Android 源码编译修改

AndroidStudio是一款非常好用又强大的开发工具,现在大部分的人都采用的是这种工具。但这个工具也有一点缺陷就是不能直接放在Android的源码下编译,而Eclipse也可以的。所以要将Android Studio的项目放到源码下编译,需要转换。 (1)将Android Studio 的项目转化成Eclipse的项目运行; (1)新建一个Eclips...

qq_32390877的博客 2419

Android 13.0 在系统app安装第三方app弹出 解析安装包出现问题 的解决方案

在13.0的系统定制化开发中,对于系统内置app中用代码调用系统安装接口安装app时抛出Permission Denial: that is not exported from UID 1000的异常,查询资料这个异常发现通常是由于Uri权限导致的问题,这就需要看PMS在安装的时候,需要什么权限,然后根据相关的日志分析 相关的安装流程,授予权限就可以了,接下来分析相关的代码流程

安卓兼职framework和app工程师的博客 2485

在源码环境中编译Android studio项目时的mk脚本编写

1、Main项目是主工程,下面有名为app的项目       CommonLib是库工程,下面有名为lib的项目       Main项目会用到CommonLib库。 2、源码环境中两个项目是在同一个目录下,平级的。 3、参考了android源码中Contacts包含库ContactsCommon时mk的编写 4、Main的Android.mk LOCAL_PA

风的专栏 2207

别再死记硬背MAML原理了!用PyTorch手撸一个Omniglot小样本分类器(附完整代码)

本文详细介绍了如何使用PyTorch实现MAML(模型无关的元学习)算法,构建一个Omniglot小样本分类器。通过实战代码演示,帮助读者理解MAML的双层优化原理,并提供了完整的训练循环、网络架构设计及调试技巧,适合想要掌握元学习技术的开发者。

weixin_29191669的博客 131

微信爬虫服务器,微信文章爬虫使用教程 - 八爪鱼采集器

对于某些用户来说,直接自定义规则可能有难度,所以在这种情况下,我们提供了网页简易模式,网页简易模式下存放了国内一些主流网站爬虫采集规则,在你需要采集相关网站时可以直接调用,节省了制作规则的时间以及精力。微信文章采集下来有很多作用,比如可以将自己行业中最近一个月之内发布的内容采集下来,然后分析文章标题和内容的一个方向与趋势。所以本次介绍八爪鱼简易采集模式下“搜狗公众号”的使用教程以及注意要点。步骤一...

weixin_26712065的博客 3256

Android Framework开发之新加一个app源码到packages/apps编译Android.mk配置

hi,粉丝朋友们大家好! 近来有朋友反馈在看我的android framework实战开发合集课程时候 (https://download.csdn.net/combo/detail/2202) 需要购买可以参考直接找千里马最优惠:https://blog.csdn.net/learnframework/article/details/124086882 反馈一个问题,那就是课程确实讲解了怎么预制apk的,但是否可以考虑补充讲解一下如果想增加一个app但是不是apk预制,而是源码增加的方式,即相当于我想把工

learnframework的博客 3956

如何使用 SAP ABAP Development Tool 连接 SAP BTP 上的免费 ABAP 编程环境

在云端环境编写 ABAP 代码会遇到一些限制,比如你无法在云端 ABAP 编程环境进行发生在传统 SAPGUI 里的 Dynpro 和 Screen 编程。部分在 SAPGUI 里使用的 List 处理相关的关键字比如 WRITE,还有 CALL TRANSACTION 等代码,也无法在云端使用。 当然如果大家觉得上面提到的这些限制不会影响自己的 ABAP 学习,就可以继续本文的阅读,使用 ABAP Development Tool 登录云端的 ABAP 编程环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1517

Android 源码环境Android.mk编译android studio 项目

前言 由于Android.mk编译app默认使用的目录与android studio项目目录不一样导致无法直接编译。另外android studio 项目常常依赖其aar或jar库,直接把代码放入源码编译会出现找不到资源的情况。本文描述了如何在Android 源码环境Android.mk编译android studio 项目,涉及资源路径配置、aar和jar配置。本文基于android 8.1 源码环境。 最终Android.mk内容如下,使用到了appcompat和constraint。 LOCA

BIG的专栏 2301

【25届数字IC秋招总结】面试经验13——豪威科技面试

25届数字ic面试记录———豪威科技

lalala0635的博客 363

【光伏风电功率预测】基于 ICEEMDAN + MSCNN-BiGRU-Attention 的并行预测模型

本文提出一种基于ICEEMDAN分解与多尺度深度学习的光伏/风电功率并行预测框架。针对多能源、多时间尺度、强非平稳特性带来的建模挑战,该模型首先通过改进的ICEEMDAN算法将原始功率序列分解为不同频段的IMF分量;随后为每个IMF构建包含多尺度CNN、双向GRU和注意力机制的子模型,实现局部特征提取与时序依赖建模;最后通过并行预测与重构获得最终功率输出。实验表明,该方法能有效解决模式混叠问题,提升预测精度,并支持光伏/风电的独立或联合预测部署,适用于风光联合调度等工程场景。

专注AI大模型,软件混淆,授权 155

移植App源码从Android Studio到系统源码编译

Android Studio目录树 server@dev:~/code/app/ToolBox$ tree . ├── Android.mk ├── app │ └── src │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ ├── libs │ │ └── res ├── build.gradle ├── gradle ├── gradle.properties

特立独行的博客 4698

【C++】【STL算法】数据窄化及代码安全性

本文系统探讨了C++工程中数据窄化(narrowing conversion)的隐患与解决方案。数据窄化指将高精度/大范围类型转换为低精度/小范围类型,虽语法合法但会导致静默精度损失。其危险性体现在:错误隐蔽、STL会放大问题、数值错误具有传播性。现代C++要求窄化必须显式声明,文中提出四种工程解决方案:显式转换、边界统一转换、范围检查转换和使用GSL工具。建议在系统边界集中处理窄化,保持计算链路类型一致性,并通过分层策略(建模用double,控制用float)确保数值稳定性。核心思想是让窄化成为清晰可控的

Double Galaxy 80

Android studio项目编译进安卓源码中

自定义launcher移到Android源码中编译。

lixuSpace001的博客 1284

GStreamer Plugin之Gst-nvdewarper

支持三种投影类型 NVDS_META_SURFACE_FISH_PUSHBROOM, NVDS_META_SURFACE_FISH_VERTCYL 和NVDS_META_SURFACE_PERSPECTIVE_PERSPECTIVE。关于每个平面的NvDewarperSurfaceMeta参数(projection_type, surface_index, and source_id)以及内存中有效的矫正平面(num_filled_surfaces)包含RGBA格式的一帧的缓存。矫正后的RGBA格式。

pvmsmfchcs的博客 367

6.14华为OD机试真题 新系统 - 字符串格式调整 (Java/Py/C/C++/Js/Go)

# **字符串格式调整** > 2026 华为OD机试真题 6月14日华为OD上机新系统考试真题 100 分题型 点击查看华为 OD 机试真题完整目录:[2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解](https://blog.csdn.net/banxia_frontend/article/details/160346662) # 题目描述 输入一个字符串,字符串中只包含大写字母和数字。要求将字符串中的所有数字提取出来,按出现的顺序组

算法大师! 947

Android Studio 创建的app放到Android 源码下编译

Android Studio 创建的app放到Android 源码下编译

weixin_45767368的博客 3838

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[RK3399][Android7.1] 调试笔记 --- 编译出来的APP在源码中编译失败问题

Platform: RK3399 OS: Android 7.1 Kernel: v4.4.83 背景: APK是通过Android Studio使用高版本的SDK Version(API Level 28)编译生成的,然后被放到了Android源码(API Level 25)中当作第三方APK来编译,编译出错。 Error Log: [ 35% 105/294] build out/targe...

Kris Fei's blog 3746

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android 源码中编译Android studio工程

1、package/apps目录下新建文件夹(如MyOkhttpDemo),并在MyOkhttpDemo目录下新建src文件夹 2、将OkhttpDemo工程目录中的AndroidManifest.xml文件拷贝到MyOkhttpDemo目录 3、将OkhttpDemo工程目录中的res文件夹拷贝到MyOkhttpDemo目录 4、将OkhttpDemo工程目录中的com文件夹(即包名目录)拷

小猴爷 2173

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: git rebase 用法记录
下一篇: Android 任务管理器分析小结
dzy_mails
博客等级 码龄14年 42粉丝 90原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值