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

发布于:2024-12-20 ⋅ 阅读:(122) ⋅ 点赞:(0)

新建空白项目

用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"],
    },
}


网站公告

今日签到

点亮在社区的每一天
去签到