当前位置: 首页 > article >正文

Android Studio新建项目在源码中编译

新建空白项目

用AS新建默认空项目,代码目录如下:

MyApplication$ tree  -L 4
.
├── Android.bp    // bp编译脚本
├── Android.mk.bak   // mk编译脚本
├── app   // 下面目录结构是AS新建工程目录
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src
│       ├── androidTest
│       │   └── java
│       ├── main
│       │   ├── AndroidManifest.xml
│       │   ├── java
│       │   └── res
│       └── test
│           └── java
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── proguard.flags
└── settings.gradle

源码中编译

编写mk或者bp脚本后,可以将工程拷贝到系统源码中,然后进行单编

mk脚本:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true // 使用aapt2进行编译

LOCAL_MODULE_TAGS := optional // 所有平台下进行编译
LOCAL_PACKAGE_NAME := MyApplication // 应用名
LOCAL_PRIVATE_PLATFORM_APIS := true // sdk的hide的api來编译
LOCAL_MULTILIB=32 // 编译32位app 
LOCAL_STATIC_ANDROID_LIBRARIES := \ // 引用Android系统库
    android-support-v4 \
    android-support-v7-appcompat \
    android-support-v13 \
    android-support-design \

LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main) // 指定java源代码文件
LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml // 指定AndroidManifest
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/app/src/main/res // 指定res  

LOCAL_CERTIFICATE := platform // 使用平台签名

LOCAL_DEX_PREOPT := false // 不进行odex优化
LOCAL_PROGUARD_ENABLED := disabled // 不进行混淆
include $(BUILD_PACKAGE) // 编译生成apk

bp脚本:可以参考~/source/packages/apps/Music

android_app {// 编译生成apk
    name: "MyApplication", // 应用名
    srcs: ["app/src/main/**/*.java"], // 指定java源代码文件
    resource_dirs: ["app/src/main/res"], // 指定res  
    manifest: "app/src/main/AndroidManifest.xml", // 指定AndroidManifest,如果manifest和bp在同一目录,可以不指定
    static_libs: [ // 引用Android系统库
        "android-support-v4",
        "android-support-v7-appcompat",
        "android-support-v7-appcompat",
        "android-support-design"
    ],
    sdk_version: "current",// 类似mk中LOCAL_SDK_VERSION,指定后不能使用系统hideapi
    product_specific: true, // 编译出来放在/product目录下(默认是放在/system目录下)
    optimize: { // 优化混淆配置
        proguard_flags_files: ["proguard.flags"],
    },
}


http://www.kler.cn/a/443882.html

相关文章:

  • 2.4 网络概念(分层、TCP)
  • React简单了解
  • linux-----常用指令
  • 探索 Python编程 调试案例:计算小程序中修复偶数的bug
  • 【C#】try-catch-finally语句的执行顺序,以及在发生异常时的执行顺序
  • linux普通用户使用sudo不需要输密码
  • MySQL基础笔记(二)
  • mHandPro 动捕手套:在具身智能、VR互动及仿真教学中的卓越表现
  • 【ppt技巧】如何设置PPT带有密码的只读模式?
  • Elasticsearch 8.x 集成与 Java API 使用指南
  • 分布式链路追踪-03-分布式系统跟踪工具,如何设计 span?
  • 基于JavaWeb(SSM+MySQL)问卷调查管理系统设计与实现毕业论文
  • 不同协议下的接口测试方案设计
  • CEF127 编译指南 MacOS 篇 - 编译 CEF(六)
  • 【计算机视觉基础CV】02-入门详解图像分类、经典数据集、比赛与冠军图像模型演进史
  • OpenCV DCT图像去噪(SIMD加速)
  • linux中 umask 命令
  • 流式处理,为什么Flink比Spark Streaming好?
  • 前端JavaScript(六)---JS中的事件
  • 中软高科身份证云解码金融(银行)解决方案介绍
  • 智源大模型通用算子库FlagGems四大能力升级 持续赋能AI系统开源生态
  • 简单工厂、工厂方法、抽象工厂的区别
  • 哪些视频媒体平台可给企业直播间做分发拉流转播宣传?提升流量数据!
  • 如何配置防火墙提高服务器安全性
  • 【C语言】常见的scanf()接收异常及注意事项
  • websocket的心跳检测和断线重连