新建空白项目
用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"],
},
}