一、配置资源 映射与举例
1、Source Code (java代码)
2、Resource Files (xml资源)
3、AIDL Files
4、jni(c cpp so)
5、assets
6、AndroidManifest
7、Dependencies
以MiuiExtraPhoto为例
需要依赖本地资源: jar、aar如下;
需要依赖maven资源: miuix.recyclerview、miuix.appcompat
二、结果对比
Android.bp
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
android_app {
name: "GeoLocation",
certificate: "platform",
...
# manifest
manifest: "AndroidManifest.xml",
# src
srcs: ["src/**/*.java"],
# res
resource_dirs: [
"app/res",
"res",
]
# assets
asset_dirs: [
"assets"
]
# dependencies
libs: [
"geo_izatsdk",
"geo_AMap2DMap",
"geo_rxjava",
"geo_rxandroid",
"androidx.vectordrawable_vectordrawable-animated",
"androidx.exifinterface_exifinterface",
"androidx.swiperefreshlayout_swiperefreshlayout",
"androidx.localbroadcastmanager_localbroadcastmanager",
"androidx.appcompat_appcompat-latest",
],
android_static_libs: [
"androidx.fragment_fragment-latest",
"androidx.appcompat_appcompat-resources-latest",
"androidx.appcompat_appcompat-latest",
"androidx.preference_preference-latest",
"androidx.vectordrawable_vectordrawable-animated",
"androidx.exifinterface_exifinterface",
"androidx.swiperefreshlayout_swiperefreshlayout",
"androidx.localbroadcastmanager_localbroadcastmanager",
"androidx.legacy_legacy-support-v13",
"androidx.recyclerview_recyclerview",
"androidx.annotation_annotation"
]
}
Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := GeoLocation
LOCAL_CERTIFICATE := platform
...
# src
LOCAL_SRC_FILES := $(call all-java-files-under, src)
# res
LOCAL_RESOURCE_DIR += \
$(addprefix $(LOCAL_PATH)/app/, res) \
$(addprefix $(LOCAL_PATH)/, res)
# assets
LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets
# dependencies
LOCAL_JAVA_LIBRARIES := \
miui-gson \
miui-eventbus \
MiCloudSDK-v18 \
LOCAL_STATIC_JAVA_LIBRARIES := \
geo_izatsdk \
geo_AMap2DMap \
geo_rxjava \
geo_rxandroid \
androidx.vectordrawable_vectordrawable-animated \
androidx.exifinterface_exifinterface \
androidx.swiperefreshlayout_swiperefreshlayout \
androidx.localbroadcastmanager_localbroadcastmanager \
androidx.appcompat_appcompat-latest
LOCAL_STATIC_ANDROID_LIBRARIES := \
androidx.fragment_fragment-latest \
androidx.appcompat_appcompat-resources-latest \
androidx.appcompat_appcompat-latest \
androidx.preference_preference-latest \
androidx.vectordrawable_vectordrawable-animated \
androidx.exifinterface_exifinterface \
androidx.swiperefreshlayout_swiperefreshlayout \
androidx.localbroadcastmanager_localbroadcastmanager \
androidx.legacy_legacy-support-v13 \
androidx.recyclerview_recyclerview \
androidx.annotation_annotation \
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
geo_izatsdk:libs-mk/izatsdk.jar \
geo_AMap2DMap:libs-mk/AMap2DMap_6.0.0_AMapSearch_7.3.0_AMapLocation_5.0.0_20200609.jar \
geo_rxjava:libs-mk/rxjava-1.1.0.jar \
geo_rxandroid:libs-mk/rxandroid-0.24.0.jar \
include $(BUILD_MULTI_PREBUILT)
include $(call all-makefiles-under,$(LOCAL_PATH))
build.gradle
buildscript {
repositories {
maven { url 'http://sdk.pt.miui.com/miuisdk/maven2/' }
maven { url 'http://sdk.pt.miui.com/miuisdk/miuix/' }
maven { url 'http://artifactory.d.xiaomi.net/artifactory/artifactory-releases/' }
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.miui.tools.build:gradle:3.4.0'
}
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "28.0.3"
defaultConfig {
applicationId "com.miui.geolocation"
multiDexEnabled true
}
sourceSets {
main {
manifest.srcFile "AndroidManifest.xml"
java.srcDirs = [
"src",
]
res.srcDirs = [
"res",
"app/res",
]
assets.srcDirs = [
"assets",
]
}
}
...
lintOptions {
checkReleaseBuilds false
abortOnError false
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
dependencies {
implementation "com.google.code.gson:gson:2.6.2"
implementation files('libs-mk/izatsdk.jar')
implementation files('libs-mk/AMap2DMap_6.0.0_AMapSearch_7.3.0_AMapLocation_5.0.0_20200609.jar')
implementation files('libs-mk/rxjava-1.1.0.jar')
implementation files('libs-mk/rxandroid-0.24.0.jar')
implementation "androidx.vectordrawable:vectordrawable-animated:1.1.0"
implementation "androidx.exifinterface:exifinterface:1.2.0"
implementation "androidx.appcompat:appcompat:1.2.0"
implementation "androidx.legacy:legacy-support-v13:1.0.0"
implementation "androidx.recyclerview:recyclerview:1.1.0"
}
allprojects {
repositories {
maven { url 'http://sdk.pt.miui.com/miuisdk/maven2/' }
maven { url 'http://sdk.pt.miui.com/miuisdk/miuix/' }
maven { url 'http://artifactory.d.xiaomi.net/artifactory/artifactory-releases/' }
maven { url 'https://jitpack.io' }
google()
jcenter()
mavenCentral()
}
}
三、操作差异
Android.bp 与 Android.mk 编译apk方法
首先在源码目录启动编译环境 :
source build/envsetup.sh
如果是盘古项目需要额外执行:AOSP不需要
export BUILD_TARGET_PEODUCT=zeus
选择对应项:
lunch 47 // missi 一般为47
构建项目:
方式一: cd 到对应目录,执行 mm
方式二: mmm 对应目录全路径
后面可加参数 -jx x可根据设备性能设置。
gradle工具常用编译指令
检查依赖并编译打包
./gradlew build
编译并打Debug包
./gradlew assembleDebug --info
编译并安装debug包
./gradlew installDebug
编译并打Release的包
./gradlew assembleRelease --info
编译并安装Release包
./gradlew installRelease
卸载Release模式包
./gradlew uninstallRelease
清除build文件夹
./gradlew clean
查看所有任务
./gradlew tasks --all
更多gradle说明 见 官方