å建 Android åº
Android åºå¨ç»æä¸ä¸ Android åºç¨æ¨¡åç¸åãå®å¯ä»¥æä¾æ建åºç¨æéçä¸åå 容ï¼å æ¬æºä»£ç ãèµæºæ件å Android æ¸ åãä¸è¿ï¼Android åºå°ç¼è¯å°æ¨å¯ä»¥ç¨ä½ Android åºç¨æ¨¡åä¾èµé¡¹ç Android å½æ¡£ (AARï¼Android Archive Resource) æ件ï¼èä¸æ¯å¨è®¾å¤ä¸è¿è¡ç APKãä¸ JAR æ件ä¸åï¼AAR æ件å¯ä»¥å å« Android èµæºåä¸ä¸ªæ¸ åæ件ï¼è¿æ ·ï¼é¤äº Java ç±»ä¸æ¹æ³å¤ï¼æ¨è¿å¯ä»¥æç»å¸å±åå¯ç»å¶å¯¹è±¡çå ±äº«èµæºã
åºæ¨¡åå¨ä»¥ä¸æ åµä¸é常æç¨ï¼
æ建使ç¨æäºç¸åç»ä»¶ï¼ä¾å¦ Activityãæå¡æ UI å¸å±ï¼çå¤ä¸ªåºç¨ã
æ建åå¨å¤ä¸ª APK åä½ï¼ä¾å¦å
è´¹çæ¬åä»è´¹çæ¬ï¼çåºç¨å¹¶ä¸éè¦å¨ä¸¤ç§çæ¬ä¸ä½¿ç¨ç¸åçæ ¸å¿ç»ä»¶ã
å¨ä»»ä½ä¸ç§æ
åµä¸ï¼åªéè¦å°æ¨å¸æéç¨çæ件移å¨å°åºæ¨¡åä¸ï¼ç¶å以ä¾èµé¡¹çå½¢å¼ä¸ºæ¯ä¸ªåºç¨æ¨¡åæ·»å åºãæ¬é¡µé¢å°è¯´æå¦ä½æ§è¡è¿ä¸¤ä¸ªæä½ã
å建åºæ¨¡å
è¦å¨æ¨ç项ç®ä¸å建ä¸ä¸ªæ°çåºæ¨¡åï¼è¯·æ以ä¸æ¥éª¤æä½ï¼
1ãç¹å»** File > New > New Moduleã**
2ãå¨åºç°ç Create New Module çªå£ä¸ï¼ä¾æ¬¡ç¹å»** Android Library å Nextãè¿åå¨ä¸ä¸ªç¨äºå建 Java åºçé项ï¼å¯ä»¥æå»ºä¼ ç»ç JAR æ件ã尽管 JAR æ件å¨å¤§å¤æ°é¡¹ç®ä¸é½é常å®ç¨ï¼å°¤å
¶å¨æ¨å¸æä¸å
¶ä»å¹³å°å
±äº«ä»£ç æ¶ï¼ï¼ä½è¿ç§æ件ä¸å
许æ¨å
å« Android èµæºææ¸
åæ件ï¼èåè
å¯¹äº Android 项ç®ä¸ç代ç éç¨é常æç¨ã**å æ¤ï¼æ¬æåå°ä¾§é论述å建 Android åºã
3ã为æ¨çåºå½åï¼å¹¶ä¸ºåºä¸ä»£ç éæ©ä¸ä¸ªæä½ç SDK çæ¬ï¼ç¶åç¹å» Finishã
å¨ Gradle 项ç®åæ¥å®æåï¼åºæ¨¡åå°æ¾ç¤ºå·¦ä¾§ç Project é¢æ¿ä¸ãå¦ææ¨æªçå°æ°æ¨¡åæ件夹ï¼è¯·ç¡®ä¿å°è§å¾åæ¢ä¸º Android è§å¾ã
å°åºç¨æ¨¡å转æ¢ä¸ºåºæ¨¡å
å¦ææ¨ç°æçåºç¨æ¨¡åå å«æ¨å¸æéç¨çææ代ç ï¼åå¯ä»¥æç §ä»¥ä¸æ¥éª¤å°å ¶è½¬æ¢ä¸ºåºæ¨¡åï¼
1ãæå¼ç°æåºç¨æ¨¡åç build.gradle æ件ãæ¨åºå¨é¡¶é¨çå°ä»¥ä¸å 容ï¼
apply plugin: 'com.android.application'2ãæç §ä¸é¢æ示æ´æ¹æ件åé ï¼
apply plugin: 'com.android.library'3ãç¹å» Sync Project with Gradle Filesã
å°±è¿ä¹ç®åã模åçæ´ä¸ªç»æä»ç¶ç¸åï¼ä½æ¯ç°å¨å®å°ä½ä¸º Android åºè¿è¡ï¼æ建ä¹å°å建ä¸ä¸ª AAR æ件ï¼èä¸æ¯ APKã
çæaar
å¨Android Studio1.4ä¸ï¼New projectï¼å é»è®¤æ°å»ºä¸ä¸ªApplicaton moduleï¼æ¥åFile > New > New Moduleï¼éæ©Androd Library > Nextï¼æå®Library NameåModule Nameã
æ°å»ºçLibraryä¸æ£å¸¸çApplicationæ大åºå«æ¯module build.gradleä¸æ¯**apply plugin: âcom.android.libraryâ **èä¸æ¯ apply plugin: 'com.android.application'
Build > Make projectï¼èªå¨çæaaræ件ã
以ä¾èµé¡¹å½¢å¼æ·»å æ¨çåº
è¦å¨å¦ä¸ä¸ªåºç¨æ¨¡åä¸ä½¿ç¨æ¨ç Android åºç代ç ï¼è¯·æ以ä¸æ¥éª¤æä½ï¼
1ãéè¿ä¸¤ç§æ¹å¼ä¹ä¸å°åºæ·»å å°æ¨ç项ç®ï¼å¦ææ¨æ¯å¨ç¸å项ç®ä¸å建çåºæ¨¡åï¼å该模åå·²ç»åå¨ï¼æ¨å¯ä»¥è·³è¿æ¤æ¥éª¤ï¼ï¼
æ·»å å·²ç¼è¯ç AARï¼æ JARï¼æ件ï¼
1ãç¹å» File > New Moduleã
2ãä¾æ¬¡ç¹å» Import .JAR/.AAR Package å** Next**ã
3ãè¾å
¥ AAR æ JAR æ件çä½ç½®ï¼ç¶åç¹å» Finishã
å°åºæ¨¡å导å
¥å°æ¨ç项ç®ä¸ï¼
1ãç¹å»** File > New > Import Moduleã**
2ãè¾å
¥åºæ¨¡åç®å½çä½ç½®ï¼ç¶åç¹å» Finishã
åºæ¨¡åå°å¤å¶å°æ¨ç项ç®ä¸ï¼å æ¤æ¨å¯ä»¥å°½ç®¡ç¼è¾åºä»£ç ãå¦ææ¨å¸æç»´æ¤ä¸ä¸ªçæ¬çåºä»£ç ï¼åæ¤æ¹æ³å¯è½ä¸æ¯æ¨æ³è¦çï¼æ¨åºæç
§ä¸ææ述导å
¥ç¼è¯ç AAR æ件ã
2ãç¡®ä¿åºåå¨æ¨ settings.gradle æ件ç顶é¨ï¼å¦ä¸é¢å为âmy-library-moduleâçåºæ示ï¼
include ':app', ':my-library-module'3ãæå¼åºç¨æ¨¡åç build.gradle æ件ï¼å¹¶å dependencies åä¸æ·»å ä¸è¡æ°ä»£ç ï¼å¦ä¸é¢çç段æ示ï¼
dependencies {4ãç¹å» Sync Project with Gradle Filesã
å¨ä¸é¢ç示ä¾ä¸ï¼å为 my-library- module ç Android åºæ¨¡åæ为 build.gradle æ件æå¨æ¨¡åçæ建ä¾èµé¡¹ã
æ¨çåºç¨æ¨¡åç°å¨å¯ä»¥è®¿é® Android åºä¸çä»»ä½ä»£ç åèµæºï¼åº AAR æ件å¨æ建æ¶å·²æç»å°æ¨ç APK ä¸ã
ä¸è¿ï¼å¦æå¸æåç¬å
±äº« AAR æ件ï¼åå¯ä»¥å¨ 项ç®å称/模åå称/build/outputs/aar/ ä¸æ¾å°å®ï¼ä¹å¯ä»¥éè¿ç¹å» Build > Make Project çæ¹å¼éæ°çææ¤æ件ã
éæ©è¦è®¾ä¸ºå ¬å¼çèµæº
åºä¸çææèµæºå¨é»è®¤æ åµä¸åå¤äºå ¬å¼ç¶æãè¦å°ææèµæºéå¼è®¾ä¸ºç§æï¼æ¨å¿ é¡»è³å°å°ä¸ä¸ªç¹å®çå±æ§å®ä¹ä¸ºå ¬å¼ãèµæºå æ¬æ¨é¡¹ç®ç res/ ç®å½ä¸çæææ件ï¼ä¾å¦å¾åãè¦é»æ¢æ¨çåºç¨æ·è®¿é®ä» ä¾å é¨ä½¿ç¨çèµæºï¼æ¨åºéè¿å£°æä¸ä¸ªæå¤ä¸ªå ¬å¼èµæºçæ¹å¼æ¥ä½¿ç¨è¿ç§èªå¨ç§ææ è¯æºå¶ã
è¦å é¤æä¸ªå ¬å¼èµæºï¼è¯·å°ä¸ä¸ªå£°ææ·»å å°æ¨çåºç public.xmlæ件ä¸ãå¦ææ¨ä¹åå°æªæ·»å å ¬å¼èµæºï¼åéè¦å¨æ¨çåºç res/values/ç®å½ä¸å建public.xml æ件ã
ä¸é¢ç示ä¾ä»£ç å¯ä»¥å建两个å称åå«ä¸º mylib_app_nameå mylib_public_string çå ¬å¼å符串èµæºï¼
<resources>android {
defaultConfig {
consumerProguardFiles 'lib-proguard-rules.txt'
}
...
}
dependencies {
debugCompile project(path: ':library', configuration: 'debug')
releaseCompile project(path: ':library', configuration: 'release')
}
android {
...
publishNonDefault true
}```
ä¸è¿è¯·æ³¨æï¼è®¾ç½® publishNonDefaultä¼å¢å æ建æ¶é´ã
为äºç¡®ä¿æ¨çåºç ProGuard è§åä¸ä¼å°æå¤çå缩å¯ä½ç¨æ½å å°åºç¨æ¨¡åï¼è¯·ä»
å
å«éå½è§åï¼åç¨ä¸éç¨äºæ¤åºç ProGuard åè½ãå°è¯åå©å¼åè
çè§åå¯è½ä¼ä¸åºç¨æ¨¡åæå®çå
¶ä»åºä¸çç°æ代ç å²çªï¼å æ¤ä¸åºå
å«è¿äºè§åãä¾å¦ï¼æ¨çåºç ProGuard æ件å¯ä»¥æå®å¨åºç¨æ¨¡åçå缩æé´éè¦ä¿çç代ç ã
注ï¼Jack å·¥å ·é¾ä» æ¯æ ProGuard çé¨åå缩å模ç³é项ã
AAR æ件详解
AAR æ件çæ件æ©å±å为 .aarï¼Maven 工件类åä¹åºå½æ¯ aarãæ件æ¬èº«æ¯ä¸ä¸ªå å«ä»¥ä¸å¼ºå¶æ§æ¡ç®ç zipæ件ï¼
/AndroidManifest.xml
/classes.jar
/res/
/R.txt
æ¤å¤ï¼AAR æ件å¯è½å å«ä»¥ä¸å¯éæ¡ç®ä¸çä¸ä¸ªæå¤ä¸ªï¼
/assets/
/libs/**å称 **.jar
/jni/abi å称 /å称.soï¼å ¶ä¸ abi åç§°æ¯ Android æ¯æç ABI ä¹ä¸ï¼
/proguard.txt
/lint.jar