Android Studio 创建的app放到Android 源码下编译
文章目录
- 环境
- 步骤
- 创建一个Android Studio 新项目
- 编写编译脚本
- Android.mk
- Android.bp
环境
Android Studio
版本:
Android Studio Dolphin | 2021.3.1 Patch 1
Build #AI-213.7172.25.2113.9123335, built on September 30, 2022
gradle
版本:
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
Android 源码的Build ID
及其Tag
:
SQ1A.220205.002
android-12.0.0_r28
步骤
创建一个Android Studio 新项目
将该项目复现到源码/vendor/${yout company}/apps/
中,并且复制app/src/main/AndroidManifest.xml
到项目根目录。
TestCompileOnAosp/
├── Android.bp
├── AndroidManifest.xml
├── Android.mk_bak
├── app
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
注意:由于gradle-7.4
会Move package from Android manifest to build files
,创建出来的AndroidManifest-manifest
中是没有指定包名package
的,但是Android 源码编译需要添加,则需要在app/src/main/AndroidManifest.xml
的manifest
标签下,添加包名package="com.xxx.xxxxxxx"
。
编写编译脚本
有两种:
Android.mk
#指的当前目录变量LOCAL_PATH
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)#LOCAL_MODULE_TAGS := user eng tests optional
#user: 指该模块只在user版本下才编译
#eng: 指该模块只在eng版本下才编译
#tests: 指该模块只在tests版本下才编译
#optional:指该模块在全部版本下都编译
LOCAL_MODULE_TAGS := optional#指定apk的src目录
LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main/java)
#指定apk的res目录
LOCAL_RESOURCE_DIR := \$(LOCAL_PATH)/app/src/main/res \#指定额外的Manifest,这里的Manifest和根目录Manifest其实是合并关系,不是覆盖
LOCAL_FULL_LIBS_MANIFEST_FILES:=$(LOCAL_PATH)/app/src/main/AndroidManifest.xmlLOCAL_STATIC_ANDROID_LIBRARIES := \androidx.appcompat_appcompat \com.google.android.material_material \androidx-constraintlayout_constraintlayout \#要编译成apk的名字
LOCAL_PACKAGE_NAME := TestCompileOnAosp
#去除dex相关优化,这样好处就是我们编译出来apk是可以正常adb install的不然经过dex优化后,其实apk是个空壳
LOCAL_DEX_PREOPT := false#设置该标记后会使用sdk的hide的api來编译。编译的APK中使用了系统级API,必须设定该值
LOCAL_PRIVATE_PLATFORM_APIS := true
#平台签名
LOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)
Android.bp
android_app{name: "TestCompileOnAosp",srcs: ["app/src/main/java/**/*.java"],resource_dirs: ["app/src/main/res"],additional_manifests: [ //和Android.mk一样会在根目录也有个AndroidManifest只不过他是个壳,这里这个才是真正的,二者会合并"app/src/main/AndroidManifest.xml",],static_libs: ["androidx.appcompat_appcompat","com.google.android.material_material","androidx-constraintlayout_constraintlayout",],//依赖的jar包dex_preopt: {enabled: false,},platform_apis: true,//。和Android.mk中的 LOCAL_PRIVATE_PLATFORM_APIS的作用相同certificate: "platform",//代表签名
}
结果:
Install: out/target/product/xxxx/system/app/XxxxxApp
附:LOCAL_STATIC_ANDROID_LIBRARIES
所需要的静态库,可以在源码的prebuilts/sdk/current
中查找
Android Studio 创建的app放到Android 源码下编译相关推荐
- android ctrl 左键鼠标左键直接打开xml文件夹,设置Android Studio通过Ctrl+左键查看源码...
开始学习android的时候希望能点进系统提供的控件中查看源码,但是实际操作发现,看到的每个源文件方法都是抛出的Exception,所以想要设置成可以直接查看具体实现,记录下我自己的操作方法. 1.首 ...
- 源码下编译APK,却是总是提示,找不到符号:SystemProperties 。。。
>>>>>在DeskClock下任意一个java文件中,import android.os.SystemProperties;然后添加user库,将layoutlib.j ...
- 【转】Android用NDK和整套源码下编译JNI的不同
原文网址:http://www.devdiv.com/android_ndk_jni_-blog-99-2101.html 前些天要写个jni程序,因为才几行代码,想着用ndk开发可能容易些,就先研究 ...
- android源码下编译apk内无so,Android源码编译反思
[初步构想] 如果是在一台PC上先完整的编译一次Android源码,然后将整个编译好的源码移到另一台PC,然后再在移到的PC上编译,这样估计是可以减少时间的吧? [初步测试] 初步测试结果,很令我感动 ...
- android studio创建文件,如何在Android Studio中创建File Templates
标签: File Template Android Studio 我发现一个可以让写程序变得简单的方法,那就是自定义文件模板(Custom File Templates).那么什么是File Temp ...
- Android Studio导入从Github下载的源码
现在大神写的demo都是上传在Github,有时候我们想下载下来,在本地的Android Studio上观摩,编译运行一下大神的代码.但往往看到的是Android Studio进度条无尽的滚动.这是因 ...
- android studio创建md,如何在Android Studio中设置*md文件打开方式
最近在Android Studio中写一些Demo的时候,会顺便在里面创建一个.md文件用来进行Demo笔记的书写.然而Android Studio不带有markdown预览功能,所以我就琢磨如何在A ...
- android studio开发十一 Library第三方类库源码, Jar包和SO库
原创: 发现android里面不熟悉的东西太多了,查了好多资料,终于搞清楚 Library第三方类库源码, Jar包和SO库这些都是干什么的了,怎么使用它们了. [Library第三方类库源码] Ja ...
- android l 论坛,同步更新魔趣源码Android-L编译
本帖最后由 土豆李 于 2015-6-19 19:14 编辑 同步魔趣mkl-mr1最新源码流畅性就不用说了,自己感谢美吧 添加来去电归属地 优化内核 WiFi秒连 gps定位速度 增大通话声音 内置 ...
最新文章
- Linux全攻略--MySQL数据库配置与管理
- 怎么安装python3-python3怎么安装
- php swoole 项目实战,Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)...
- scala 异步调用_非阻塞异步Java 8和Scala的Try / Success / Failure
- java调用浏览器组件来_Java 网页浏览器组件介绍
- 垃圾收集器(CMS收集器 , G1收集器…)
- 闲谈REST API
- Deep Learning for Image and Point Cloud Fusionin Autonomous Driving: A Review
- 联通路由器设置FTP服务器,做家庭储存云盘
- 跨站请求伪造(CSRF)攻击
- C++读取csv文件
- arcgis for Android 100.3.0 加载shp数据以及操作
- 计算机系统底层架构思路
- JS中常见的String方法
- 【夯实Spring Cloud】Spring Cloud分布式配置中心详解
- 微信小程序-购物车数字加减
- Linux 0.01 内存管理
- 第四届-模拟智能灌溉系统
- 如何从61850中获益
- java 工厂模式实现_Java三种实现工厂模式的方法
热门文章
- 使用VS2010来进行MFC4.2的开发
- 验证码测试的解决方案
- iApp开发彩虹易支付APP源码+支持大多数
- MySQL中用户密码存在特殊字符的使用场景
- MAPGIS-TDE 三维处理平台简介
- Android APK软件汉化整合与探讨
- 机器学习实战第二章——KNN算法(源码解析)
- js输出当前时间,以及计算学生成绩的demo
- 【STM32】 硬件IIC 驱动SSD1302(0.96 OLED模块) -- 3/4 OLED的命令表 学习
- 计算机功能区介绍,Excel2007使用教程 Excel2007强大的功能区介绍