Build-tools ของ Android SDK คืออะไรเครื่องมือแพลตฟอร์มและเครื่องมือ? และควรใช้เวอร์ชันใด


331

ฉันรู้ว่านี่เป็นคำถามที่พื้นฐานมาก แต่ด้วยความประหลาดใจของฉันฉันไม่พบเอกสารใด ๆ เกี่ยวกับ Android SDK Build-tools นอกจากเครื่องมือ Android SDK และเครื่องมือแพลตฟอร์ม SDK ของ Android แล้วยังมีชุดเครื่องมือสร้าง SDK ของ Android ดังที่แสดงในภาพหน้าจอต่อท้าย ใครช่วยชี้ไปที่แหล่งที่มาอธิบายทั้งหมดของพวกเขาและช่วยชี้แจงวิธีการสร้างเครื่องมือ Android SDK Build-version

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไขแล้ว (2014-02-27) :

ฉันยังไม่เข้าใจเครื่องมือทั้งหมดอย่างสมบูรณ์ ต่อไปนี้เป็นความเข้าใจที่ จำกัด ของฉันตามเอกสารล่าสุดของ Google:

  • Android SDK Build-เครื่องมือที่ใช้เป็นส่วนประกอบของAndroid SDK แพลตฟอร์มเครื่องมือ พวกเขาได้รับการแยกออกจากแพลตฟอร์ม Android SDK เครื่องมือเพื่อให้เครื่องมือสร้างสามารถอัปเดตเป็นอิสระจากองค์ประกอบการพัฒนาสภาพแวดล้อมแบบบูรณาการ (IDE)
  • เครื่องมือแพลตฟอร์ม Android SDK ได้รับการปรับแต่งเพื่อรองรับคุณสมบัติของแพลตฟอร์ม Android ล่าสุด มันเข้ากันได้แบบย้อนกลับเพื่อให้คุณใช้อัปเดตล่าสุดของแพลตฟอร์มเครื่องมือ SDKของAndroidแม้แอปของคุณจะกำหนดเป้าหมายแพลตฟอร์ม Android ที่เก่ากว่า
  • เครื่องมือ SDKเป็นแพลตฟอร์มอิสระและไม่จำเป็นต้องมีไม่ว่าคุณจะพัฒนาแพลตฟอร์ม Android ใดก็ตาม

ฉันยังไม่เข้าใจถึงเหตุผลในการนำAndroid SDK Build-toolsออกจากAndroid SDK Platform-toolsซึ่งมีอินสแตนซ์เดียวและง่ายต่อการจัดการการอัปเดต เหตุผลที่เป็นไปได้เพียงอย่างเดียวที่ฉันคิดได้ก็คือแอพบางตัวต้องพึ่งพาส่วนประกอบการสร้างที่เก่ากว่าเพื่อสร้าง เอกสารของ Google กล่าวถึงเรื่องนี้ แต่ไม่ได้อธิบายว่าทำไม เมื่อดูที่บันทึกประจำรุ่นคุณจะสังเกตเห็นว่าการอัปเดตของAndroid SDK Build-toolsนั้นใช้สำหรับแก้ไขข้อบกพร่องหรือ / เพิ่มการสนับสนุนสำหรับแพลตฟอร์มใหม่เป็นหลัก เหตุผลเดียวที่ฉันนึกถึงแอพบางตัวที่จะใช้Android SDK Build-toolsเวอร์ชันเก่าคือพวกเขาใช้ข้อบกพร่องบางอย่างของAndroid SDK Build-tools. แอปเหล่านี้จะไม่ทำงานตามปกติหากไม่ได้สร้างขึ้นด้วยบั๊กเหล่านี้ ฉันหวังว่า Google จะสามารถอธิบายสิ่งนี้ได้ดีขึ้นโดยให้ตัวอย่างหนึ่งหรือสองตัวอย่างแสดงว่าทำไมข้อบกพร่องเหล่านี้ในเครื่องมือจึงมีความสำคัญสำหรับบางแอป

คำตอบ:


88

เกี่ยวกับเวอร์ชันของAndroid SDK Build-toolsคำตอบคือ

ตามค่าเริ่มต้น Android SDK จะใช้เครื่องมือสร้างรุ่นที่ดาวน์โหลดล่าสุด

แหล่ง

ใน Eclipse คุณสามารถเลือกเวอร์ชันที่ต้องการได้โดยใช้sdk.buildtoolsคุณสมบัติในproject.propertiesไฟล์

ดูเหมือนจะไม่มีหน้าทางการอธิบายเครื่องมือสร้างทั้งหมด นี่คือสิ่งที่ทีม Android พูดเกี่ยวกับเรื่องนี้

เครื่องมือ [build] เช่น aidl, aapt, dexdump และ dx นั้นถูกเรียกโดยเครื่องมือสร้าง Android หรือ Android Development Tools (ADT) ดังนั้นคุณจึงไม่ค่อยจำเป็นต้องเรียกใช้เครื่องมือเหล่านี้โดยตรง ตามกฎทั่วไปคุณควรพึ่งพาเครื่องมือสร้างหรือปลั๊กอิน ADT เพื่อเรียกใช้ตามความจำเป็น

แหล่ง

อย่างไรก็ตามนี่คือการสังเคราะห์ความแตกต่างระหว่างเครื่องมือเครื่องมือแพลตฟอร์มและเครื่องมือสร้าง:

  • เครื่องมือ Android SDK
    • สถานที่ตั้ง: $ANDROID_HOME/tools
    • เครื่องมือหลัก: มดสคริปต์ (เพื่อสร้าง APK ของคุณ) และddms(สำหรับการดีบัก)
  • เครื่องมือแพลตฟอร์ม Android SDK
    • สถานที่ตั้ง: $ANDROID_HOME/platform-tools
    • เครื่องมือหลัก: adb(เพื่อจัดการสถานะของอีมูเลเตอร์หรืออุปกรณ์ Android)
  • เครื่องมือสร้าง SDK Android
    • สถานที่ตั้ง: $ANDROID_HOME/build-tools/$VERSION/
    • เอกสาร
    • เครื่องมือหลัก: aapt(เพื่อสร้าง R.java และ APK ที่ไม่ได้ลงชื่อและไม่ได้ลงชื่อ), dx(เพื่อแปลง Java bytecode เป็น Dalvik bytecode) และzipalign(เพื่อเพิ่มประสิทธิภาพ APK ของคุณ)

ฉันดีใจจริงๆที่มีบันทึกการเปลี่ยนแปลงสำหรับรุ่นเครื่องมือสร้างที่แตกต่างกัน
Ewoks

@lacton ฉันใช้เครื่องมือสร้างรุ่นเก่า (รุ่น 17) สำหรับโครงการของฉัน ฉันสามารถสร้างใหม่ด้วยเครื่องมือสร้างล่าสุดได้หรือไม่
user1156041

เราสามารถใช้เครื่องมือ sdk + build เดียวกันสำหรับ eclipse และ studio ได้หรือไม่?
Muhammad Babar

38

เครื่องมือสร้าง Android SDK ใช้ในการดีบักสร้างรันและทดสอบแอปพลิเคชัน Android

เครื่องมือสร้าง Android สามารถใช้ในการพัฒนาและทำงานจากบรรทัดคำสั่งหรือ IDE (เช่น Eclipse หรือ Android Studio)

ใช้เพื่อเชื่อมต่ออุปกรณ์ Android และรูทอุปกรณ์ (fastboot, adb และอื่น ๆ .. )

ใช้ล่าสุดเสมอ (แนะนำ)

ข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือและคำสั่งของ Android Build


ขอบคุณสำหรับข้อมูล. คุณหมายความว่า Android Build Tools "ใช้เพื่อเชื่อมต่ออุปกรณ์ Android และรูทอุปกรณ์เหล่านั้นหรือไม่" adbis เป็นส่วนหนึ่งของเครื่องมือแพลตฟอร์ม Android adb ขึ้นอยู่กับเครื่องมือสร้าง Android ที่จะใช้งานได้หรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร ฉันอยากรู้
ฮ่องกง

adb สามารถใช้ในการผลักและดึงไฟล์จากบรรทัดคำสั่ง (ฟังก์ชั่นอื่น ๆ ) สามารถใช้ fastboot เพื่อโหลดตักบูตแบบกำหนดเอง อย่างไรก็ตามคำสั่งเหล่านี้ไม่มีประโยชน์สำหรับการพัฒนา Android ยกเว้นว่าคุณใช้เทอร์มินัลสำหรับการพัฒนา ทุกอย่างมีอยู่ใน IDE เอง
mipreamble

1
ความเข้าใจของฉันคือ Eclipse ใช้ adb.exe ในพื้นหลัง
หง

@mipreamble ดังนั้นความแตกต่างระหว่าง android sdk: tools, platform-tools และ build-tools คืออะไร? ฉันสามารถสร้างและเรียกใช้แอปได้โดยไม่ต้องใช้เครื่องมือสร้าง
kreker

1
@CJBS ใช่ การผสานกับชุดเครื่องมือสำหรับเวอร์ชันจะใช้งานได้ เครื่องมือ Build ได้รับการอัปเดตเมื่อ Android เวอร์ชันใหม่เข้ามาคุณต้องการรวบรวมและทดสอบแอปพลิเคชันสำหรับ Android เวอร์ชันล่าสุด
mipreamble

16

ฉันจะทิ้งการอภิปรายถึงความแตกต่างระหว่างเครื่องมือสร้าง, เครื่องมือแพลตฟอร์มและเครื่องมือให้ผู้อื่น จากมุมมองเชิงปฏิบัติคุณจะต้องรู้คำตอบสำหรับคำถามที่สองของคุณ:

ควรใช้เวอร์ชันใด

คำตอบ: ใช้รุ่นล่าสุด

สำหรับผู้ที่ใช้ Android Studio ที่มี Gradle buildToolsVersionต้องตั้งค่าในไฟล์build.gradle(โมดูล: แอพ)

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    ...
}

ฉันจะรับเครื่องมือสร้างรุ่นล่าสุดได้ที่ไหน

เปิดตัวจัดการ SDK Android

  • ใน Android Studio ไปที่เครื่องมือ > Android > ตัวจัดการ SDK > ลักษณะและพฤติกรรม > การตั้งค่าระบบ > Android SDK
  • เลือกแท็บเครื่องมือ SDK
  • เลือกเครื่องมือสร้าง SDK ของ Androidจากรายการ
  • ตรวจสอบการแสดงรายละเอียดแพคเกจ

รายการสุดท้ายจะแสดงเวอร์ชันล่าสุด

ป้อนคำอธิบายรูปภาพที่นี่

ตรวจสอบให้แน่ใจว่าได้ติดตั้งแล้วจากนั้นเขียนหมายเลขนั้นbuildToolsVersionในbuild.gradle(โมดูล: แอพ)


1
หากมี 24.0.2 ทำไม 24.0.1 และ 24 ไม่ถูกทำเครื่องหมายว่าล้าสมัย (ผู้จัดการแบบสแตนด์อโลนอนุญาตให้แสดง / ซ่อนแพ็คเกจล้าสมัย)
user1803551

3
@ user1803551 ไม่ต้องการใช้รุ่นเครื่องมือสร้างล่าสุดโดยอัตโนมัติ ตัวอย่างเช่นสมมติว่าคุณได้ทดสอบแอพของคุณอย่างละเอียดด้วยเครื่องมือสร้างเวอร์ชันเฉพาะ หากคุณอัปเดตเครื่องมือสร้างของคุณเป็นไปได้ว่าการเปลี่ยนแปลงที่นั่นอาจทำลายบางสิ่งในแอปของคุณ การอนุญาตให้นักพัฒนาใช้เวอร์ชันเครื่องมือสร้างต่อเนื่องทำให้พวกเขามั่นใจได้ว่างานสร้างของพวกเขาจะทำงานได้อย่างที่คาดไว้ หากคุณดูที่รูปแบบของสิ่งที่ล้าสมัยคุณจะเห็นได้ว่าในที่สุด 24 และ 24.0.1 จะถูกประกาศให้ล้าสมัยในที่สุด
Suragch

13

คุณสามารถหารายละเอียดเกี่ยวกับสิ่งเหล่านี้ได้ใน Android - เครื่องมือบรรทัดคำสั่ง


TL; DR:

เครื่องมือ SDK:

  1. Android SDK Manager (sdkmanager)
  2. ผู้จัดการ AVD (avdmanager)
  3. เซิร์ฟเวอร์ตรวจสอบดีบัก Dalvik (ddms)

เครื่องมือสร้าง:

  1. ฝ่ายที่ลงนาม
  2. PROGUARD
  3. zipalign
  4. jobb

เครื่องมือแพลตฟอร์ม:

  1. adb
  2. aidl, aapt, dexdump และ dx
  3. bmgr
  4. logcat

1
Aidl, aapt, dexdump และ dx เหล่านี้เป็นส่วนประกอบของเครื่องมือสร้างไม่ใช่เครื่องมือแพลตฟอร์ม
Masum

9

คำตอบที่ถูกคือ

แยกส่วนประกอบบิลด์เฉพาะของ Android SDK ออกจากคอมโพเนนต์แพลตฟอร์มเครื่องมือเพื่อให้เครื่องมือสร้างสามารถอัปเดตได้อย่างอิสระโดยอิสระจากคอมโพเนนต์สภาพแวดล้อมการพัฒนาแบบรวม (IDE)

ลิงก์ (ขยายการแก้ไข 17)


4
ขอขอบคุณสำหรับข้อมูล. หากรุ่นที่ใหม่กว่าเป็นเพียงรุ่นที่ปรับปรุงแล้วทำไม Google ไม่มีเครื่องมือ Build เพียงอันเดียวและทำการอัปเดตอย่างต่อเนื่องเช่นเครื่องมือ SDK และเครื่องมือแพลตฟอร์ม กล่าวอีกนัยหนึ่งว่าทำไมถึงมีรุ่นเก่ากว่าอยู่ที่นั่น?
ฮง

2
ฉันเพิ่งพยายามโหวตคำตอบนี้ แต่มันกลับกลายเป็นว่าฉันโหวตขึ้นแล้วเมื่อปีที่แล้ว! @Hong พวกเขาเก็บเครื่องมือบิลด์เก่าไว้เพราะเมื่อพวกเขาอัพเดตเครื่องมือคุณลักษณะบางอย่างจะเลิกใช้แล้ว แต่นักพัฒนาแอปอาจมีซอร์สโค้ดที่อาศัยคุณสมบัติเหล่านั้นเพื่อให้เวอร์ชันเก่าพร้อมใช้งานเพื่อสนับสนุนฐานรหัสเก่าเหล่านั้น
คู่ครอง

1
ในกรณีนี้พวกเขาควรมีรายการคุณสมบัติที่เลิกใช้หรือไม่เพื่อให้นักพัฒนาสามารถทราบได้อย่างแน่นอนว่าพวกเขายังคงต้องใช้เวอร์ชันเก่าหรือไม่?
ฮง

@Hong: นั่นเป็นคำถามที่ฉันต้องการ ตอนนี้ ... ออกไปเพื่อหาคำตอบ :)
DerpyNerd

2

เครื่องมือสร้าง SDK Android เป็นชื่อที่แน่นอน เครื่องมือสำหรับการสร้างแอปพลิเคชัน Android เป็นสิ่งสำคัญอย่างยิ่งที่จะใช้เครื่องมือสร้างรุ่นล่าสุด (เลือกโดยอัตโนมัติโดย IDE ของคุณผ่าน Android SDK) แต่เหตุผลที่รุ่นเก่าเหลืออยู่นั้นมีไว้เพื่อรองรับความเข้ากันได้ย้อนหลังนั่นคือ เครื่องมือสร้างรุ่นเก่ากว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.