一茂卦、配置資源 映射與舉例
1、Source Code (java代碼)
image.png
2组哩、Resource Files (xml資源)
image.png
3等龙、AIDL Files
image.png
4处渣、jni(c cpp so)
image.png
image.png
5、assets
image.png
6蛛砰、AndroidManifest
image.png
7罐栈、Dependencies
以MiuiExtraPhoto為例
需要依賴本地資源: jar、aar如下;
需要依賴maven資源: miuix.recyclerview泥畅、miuix.appcompat
image.png
image.png
image.png
image.png
二荠诬、結(jié)果對比
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方法
首先在源碼目錄啟動編譯環(huán)境 :
source build/envsetup.sh
如果是盤古項目需要額外執(zhí)行:AOSP不需要
export BUILD_TARGET_PEODUCT=zeus
選擇對應(yīng)項:
lunch 47 // missi 一般為47
構(gòu)建項目:
方式一: cd 到對應(yīng)目錄位仁,執(zhí)行 mm
方式二: mmm 對應(yīng)目錄全路徑
后面可加參數(shù) -jx x可根據(jù)設(shè)備性能設(shè)置柑贞。
gradle工具常用編譯指令
檢查依賴并編譯打包
./gradlew build
編譯并打Debug包
./gradlew assembleDebug --info
編譯并安裝debug包
./gradlew installDebug
編譯并打Release的包
./gradlew assembleRelease --info
編譯并安裝Release包
./gradlew installRelease
卸載Release模式包
./gradlew uninstallRelease
清除build文件夾
./gradlew clean
查看所有任務(wù)
./gradlew tasks --all
更多gradle說明 見 官方