文章目录

  • 环境
  • 步骤
    • 创建一个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.4Move package from Android manifest to build files,创建出来的AndroidManifest-manifest中是没有指定包名package的,但是Android 源码编译需要添加,则需要在app/src/main/AndroidManifest.xmlmanifest标签下,添加包名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 源码下编译相关推荐

  1. android ctrl 左键鼠标左键直接打开xml文件夹,设置Android Studio通过Ctrl+左键查看源码...

    开始学习android的时候希望能点进系统提供的控件中查看源码,但是实际操作发现,看到的每个源文件方法都是抛出的Exception,所以想要设置成可以直接查看具体实现,记录下我自己的操作方法. 1.首 ...

  2. 源码下编译APK,却是总是提示,找不到符号:SystemProperties 。。。

    >>>>>在DeskClock下任意一个java文件中,import android.os.SystemProperties;然后添加user库,将layoutlib.j ...

  3. 【转】Android用NDK和整套源码下编译JNI的不同

    原文网址:http://www.devdiv.com/android_ndk_jni_-blog-99-2101.html 前些天要写个jni程序,因为才几行代码,想着用ndk开发可能容易些,就先研究 ...

  4. android源码下编译apk内无so,Android源码编译反思

    [初步构想] 如果是在一台PC上先完整的编译一次Android源码,然后将整个编译好的源码移到另一台PC,然后再在移到的PC上编译,这样估计是可以减少时间的吧? [初步测试] 初步测试结果,很令我感动 ...

  5. android studio创建文件,如何在Android Studio中创建File Templates

    标签: File Template Android Studio 我发现一个可以让写程序变得简单的方法,那就是自定义文件模板(Custom File Templates).那么什么是File Temp ...

  6. Android Studio导入从Github下载的源码

    现在大神写的demo都是上传在Github,有时候我们想下载下来,在本地的Android Studio上观摩,编译运行一下大神的代码.但往往看到的是Android Studio进度条无尽的滚动.这是因 ...

  7. android studio创建md,如何在Android Studio中设置*md文件打开方式

    最近在Android Studio中写一些Demo的时候,会顺便在里面创建一个.md文件用来进行Demo笔记的书写.然而Android Studio不带有markdown预览功能,所以我就琢磨如何在A ...

  8. android studio开发十一 Library第三方类库源码, Jar包和SO库

    原创: 发现android里面不熟悉的东西太多了,查了好多资料,终于搞清楚 Library第三方类库源码, Jar包和SO库这些都是干什么的了,怎么使用它们了. [Library第三方类库源码] Ja ...

  9. android l 论坛,同步更新魔趣源码Android-L编译

    本帖最后由 土豆李 于 2015-6-19 19:14 编辑 同步魔趣mkl-mr1最新源码流畅性就不用说了,自己感谢美吧 添加来去电归属地 优化内核 WiFi秒连 gps定位速度 增大通话声音 内置 ...

最新文章

  1. Linux全攻略--MySQL数据库配置与管理
  2. 怎么安装python3-python3怎么安装
  3. php swoole 项目实战,Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)...
  4. scala 异步调用_非阻塞异步Java 8和Scala的Try / Success / Failure
  5. java调用浏览器组件来_Java 网页浏览器组件介绍
  6. 垃圾收集器(CMS收集器 , G1收集器…)
  7. 闲谈REST API
  8. Deep Learning for Image and Point Cloud Fusionin Autonomous Driving: A Review
  9. 联通路由器设置FTP服务器,做家庭储存云盘
  10. 跨站请求伪造(CSRF)攻击
  11. C++读取csv文件
  12. arcgis for Android 100.3.0 加载shp数据以及操作
  13. 计算机系统底层架构思路
  14. JS中常见的String方法
  15. 【夯实Spring Cloud】Spring Cloud分布式配置中心详解
  16. 微信小程序-购物车数字加减
  17. Linux 0.01 内存管理
  18. 第四届-模拟智能灌溉系统
  19. 如何从61850中获益
  20. java 工厂模式实现_Java三种实现工厂模式的方法

热门文章

  1. 使用VS2010来进行MFC4.2的开发
  2. 验证码测试的解决方案
  3. iApp开发彩虹易支付APP源码+支持大多数
  4. MySQL中用户密码存在特殊字符的使用场景
  5. MAPGIS-TDE 三维处理平台简介
  6. Android APK软件汉化整合与探讨
  7. 机器学习实战第二章——KNN算法(源码解析)
  8. js输出当前时间,以及计算学生成绩的demo
  9. 【STM32】 硬件IIC 驱动SSD1302(0.96 OLED模块) -- 3/4 OLED的命令表 学习
  10. 计算机功能区介绍,Excel2007使用教程 Excel2007强大的功能区介绍