การเพิ่มไลบรารี / JAR เข้ากับโปรเจ็กต์ Eclipse Android


130

นี่เป็นคำถามสองส่วนเกี่ยวกับการเพิ่มไลบรารีของบุคคลที่สาม (JAR) ไปยังโปรเจ็กต์ Android ใน Eclipse

ส่วนแรกของคำถามคือเมื่อฉันพยายามเพิ่ม JAR ของบุคคลที่สาม (ไลบรารี) ในโครงการ Android ของฉันฉันได้รับปัญหาครั้งแรก

เกิดข้อผิดพลาดในการแยกวิเคราะห์ XML: คำนำหน้าไม่ถูกผูก

เพราะฉันพยายามใช้คลาสจาก JAR นั้น (และต้องการคำนำหน้าที่กำหนดไว้) เกิดอะไรขึ้น?

ประการที่สอง (หลังจากแก้ไขแล้ว - คำตอบจะได้รับด้านล่าง) แอปพลิเคชันของฉันไม่ทำงานบน Android และฉันค้นพบผ่านตัวดีบักเกอร์ (LogCat) ว่าคลาสที่ฉันพยายามใช้ไม่มีอยู่

เกิดจาก: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

เหตุใดเมื่อฉันไม่พบข้อผิดพลาดในการคอมไพล์หรือลิงค์เกอร์ใน Eclipse จึงมีปัญหานี้ในโปรแกรมจำลองหรือไม่

คำถามสองข้อนี้เป็นคำถามเกี่ยวกับวาทศิลป์ที่ฉันจะตอบด้วยตัวเองด้านล่าง โพสต์อื่น ๆ ในฟอรัมนี้ทำให้เกิดปัญหาและที่อื่น ๆ ก็มีการพูดคุยกัน แต่ฉันรู้สึกว่าฉันสามารถเป็นประโยชน์อย่างชัดเจนมากขึ้นสำหรับคนต่อไปที่จะเข้ามา

คำตอบ:


316

ตอนนี้สำหรับปัญหาคลาสที่หายไป

ฉันเป็นนักพัฒนา Eclipse Java EE และมีนิสัยชอบเพิ่มไลบรารีของบุคคลที่สามผ่านกลไก "ไลบรารีผู้ใช้" ใน Build Path มาหลายปีแล้ว แน่นอนว่ามีอย่างน้อย 3 วิธีในการเพิ่มไลบรารีของบุคคลที่สามวิธีที่ฉันใช้เป็นวิธีที่ดีที่สุดในความเห็นที่ต่ำต้อยของฉัน

อย่างไรก็ตามสิ่งนี้จะใช้ไม่ได้สำหรับ Android ซึ่ง Dalvik "JVM" ไม่สามารถจัดการกับคลาสที่คอมไพล์ Java ธรรมดาได้ แต่ต้องแปลงเป็นรูปแบบพิเศษ สิ่งนี้จะไม่เกิดขึ้นเมื่อคุณเพิ่มห้องสมุดในแบบที่ฉันเคยชิน

ให้ทำตามคำแนะนำ (พร้อมใช้งานทั่วไป) สำหรับการนำเข้าไลบรารีของบุคคลที่สามจากนั้นเพิ่มโดยใช้ Build Path (ซึ่งทำให้ Eclipse ทราบเพื่อวัตถุประสงค์ในการคอมไพล์) นี่คือขั้นตอนโดยขั้นตอน:

  1. ดาวน์โหลดไลบรารีไปยังระบบการพัฒนาโฮสต์ของคุณ
  2. สร้างโฟลเดอร์ใหม่libsในโปรเจ็กต์ Eclipse / Android ของคุณ
  3. คลิกขวาที่libsและเลือก Import -> General -> File System จากนั้นถัดไปเรียกดูในระบบไฟล์เพื่อค้นหาไดเร็กทอรีหลักของไลบรารี (เช่น: ที่ที่คุณดาวน์โหลดไป)
  4. คลิกตกลงจากนั้นคลิกชื่อไดเร็กทอรี (ไม่ใช่ช่องทำเครื่องหมาย) ในบานหน้าต่างด้านซ้ายจากนั้นตรวจสอบ JAR ที่เกี่ยวข้องในบานหน้าต่างด้านขวา สิ่งนี้ทำให้ไลบรารีลงในโครงการของคุณ (ทางกายภาพ)
  5. คลิกขวาที่โปรเจ็กต์ของคุณเลือก Build Path -> Configure Build Path จากนั้นคลิกแท็บ Libraries จากนั้น Add JARs ... ไปที่ JAR ใหม่ของคุณในไดเร็กทอรีlibsและเพิ่ม (นี่คือช่วงเวลาที่ JAR ใหม่ของคุณถูกแปลงเพื่อใช้งานบน Android)

บันทึก

ขั้นตอนที่ 5 อาจไม่จำเป็นหากรวม lib ไว้ในเส้นทางการสร้างของคุณแล้ว เพียงตรวจสอบให้แน่ใจว่ามีอยู่จริงก่อนเพิ่ม

สิ่งที่คุณทำที่นี่ประสบความสำเร็จสองสิ่ง:

  1. รวม JAR ที่แปลงโดย Dalvik ในโครงการ Android ของคุณ
  2. ทำให้นิยาม Java พร้อมใช้งานสำหรับ Eclipse เพื่อค้นหาคลาสของ บริษัท อื่นเมื่อพัฒนา (นั่นคือการคอมไพล์) ซอร์สโค้ดของโปรเจ็กต์ของคุณ

รัสคุณน่าจะเริ่มคำถามแยกกัน "คำตอบ" นี้ดูแปลก ๆ นั่งอยู่ที่นี่
Paul Gregoire

3
ดังนั้นฉันจึงเขียนบางส่วนของคำถามใหม่เล็กน้อย ฉันต่อต้านการล่อลวงให้ทำสิ่งที่ง่าย (สิ่งที่คุณแนะนำที่นี่) เพราะฉันคิดว่าปัญหาทั้งสองเกิดจากการพยายามเพิ่มไลบรารีของบุคคลที่สามและฉันกำลังเดิมพันว่าใครก็ตามที่มีปัญหาที่สองอาจเคยมี คนแรกด้วย ขอบคุณ
Russ Bateman

ฉันหวังว่าจะมีบางอย่างที่ชัดเจนมากขึ้นเกี่ยวกับเรื่องนี้ในเอกสาร Android อย่างเป็นทางการ (ยังไม่ได้สะดุด) และคำตอบอื่น ๆ ในฟอรัมอื่น ๆ จะพูดถึง แต่อย่าให้เห็นถึงปัญหา โปรดทราบว่าใน BlackBerry ปัญหาเดียวกันนี้ถือเป็นฝันร้ายที่ยิ่งใหญ่โดยไม่มีใครให้ข้อมูลที่เชื่อถือได้เกี่ยวกับวิธีแก้ปัญหา - ไม่แน่ใจว่าฉันจะทำอย่างไรที่นั่น
Russ Bateman

2
สวัสดี @RussBateman ฉันได้ลองทำตามขั้นตอนที่คุณได้กล่าวไว้ข้างต้นแล้วและสามารถรวมโถไลบรารีในโครงการ Android ของฉันได้สำเร็จดังนั้นคลาสไลบรารีจึงสามารถเข้าถึงโครงการของฉันได้ในเวลาคอมไพล์ แต่เมื่อฉันเรียกใช้โครงการฉันได้รับข้อผิดพลาด ในคอนโซลของฉัน: "การแปลงเป็นรูปแบบ Dalvik ล้มเหลวโดยมีข้อผิดพลาด 1" .. และโครงการของฉันจะไม่เปิดตัว!
Zeba

ภายใต้สถานการณ์บางอย่างสิ่งนี้ใช้ไม่ได้ ... ฉันจำไม่ได้ว่าฉันทำอะไรลบโฟลเดอร์ libs อ่านแล้ว ... ตอนนี้ทำทุกอย่างที่คุณพูดเพิ่ม libs นำเข้า jar เพิ่มเพื่อสร้างเส้นทาง .. ข้อผิดพลาดของคอมไพเลอร์หายไป แต่ยังคงได้รับข้อยกเว้นรันไทม์ที่ไม่พบคลาส :(
Ixx

20

ตรวจสอบให้แน่ใจว่าไหของบุคคลที่สามของคุณอยู่ในโฟลเดอร์ "libs" ของโปรเจ็กต์ของคุณและจะถูกใส่ไว้ใน. apk เมื่อคุณบรรจุแอปพลิเคชันของคุณ คุณอาจเห็นข้อผิดพลาดรันไทม์บนอุปกรณ์หากไม่รองรับบางสิ่งใน jar แต่นอกเหนือจากนั้นฉันประสบความสำเร็จอย่างมากกับสิ่งนี้


1
มันเกี่ยวกับประสบการณ์ฉันเคยมีปัญหาเดียวกันมาก่อน :)
Paul Gregoire

ขอบคุณครับ แต่มันแย่มากที่เห็นว่าโฟลเดอร์ libs ต้องการสำเนาของไฟล์ Jar ภายนอกซึ่งเรามีอยู่แล้วในที่เก็บ Maven หรือที่ไหนสักแห่ง
asgs

1
น่าเสียดายที่สิ่งนี้ไม่ทำงานโดยอัตโนมัติอีกต่อไปคุณต้องบอกให้ eclipse รวมไลบรารีไว้ในไฟล์แพ็คเกจ
Neil Townsend

เมื่อไหร่ที่เปลี่ยนไป? นี่เป็นการเปลี่ยนแปลงครั้งใหญ่ของสิ่งที่เราทุกคนคุ้นเคย
Paul Gregoire

5

การตั้งค่าโครงการห้องสมุด

โปรเจ็กต์ไลบรารีเป็นโปรเจ็กต์มาตรฐานของ Android ดังนั้นคุณสามารถสร้างโปรเจ็กต์ใหม่ในลักษณะเดียวกับโปรเจ็กต์แอปพลิเคชันใหม่

เมื่อคุณสร้างโปรเจ็กต์ไลบรารีคุณสามารถเลือกชื่อแอพพลิเคชั่นแพ็คเกจและตั้งค่าฟิลด์อื่น ๆ ได้ตามต้องการดังแสดงในรูปที่ 1

จากนั้นตั้งค่าคุณสมบัติของโครงการเพื่อระบุว่าเป็นโครงการไลบรารี:

ใน Package Explorer ให้คลิกขวาที่โครงการไลบรารีแล้วเลือกคุณสมบัติ ในหน้าต่างคุณสมบัติเลือกกลุ่มคุณสมบัติ "Android" ทางด้านซ้ายและค้นหาคุณสมบัติไลบรารีทางด้านขวา เลือกช่องทำเครื่องหมาย "is Library" แล้วคลิก Apply คลิกตกลงเพื่อปิดหน้าต่างคุณสมบัติ ขณะนี้โครงการใหม่ถูกทำเครื่องหมายเป็นโครงการห้องสมุด คุณสามารถเริ่มย้ายซอร์สโค้ดและทรัพยากรไปไว้ในนั้นได้ตามที่อธิบายไว้ในส่วนด้านล่าง


4

หากคุณใช้ ADT เวอร์ชัน 22 คุณต้องตรวจสอบการอ้างอิงของ Android และไลบรารีส่วนตัวของ Android ในแท็บคำสั่งซื้อและการส่งออกในเส้นทางการสร้างโครงการ


2

ประการแรกปัญหาของคำนำหน้าหายไป

หากคุณใช้อะไรบางอย่างในไฟล์เลย์เอาต์ของคุณที่มาจากบุคคลที่สามคุณอาจต้องใช้คำนำหน้าของมันด้วยเช่น "droidfu:" ซึ่งเกิดขึ้นในหลาย ๆ ที่ในโครงสร้าง XML ด้านล่าง:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

สิ่งนี้มาจาก JAR แต่คุณจะต้องเพิ่ม "xmlns: droidfu" ใหม่ด้วย

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

หรือคุณได้รับข้อผิดพลาดของคำนำหน้าที่ไม่ถูกผูกไว้ สำหรับฉันนี่เป็นความล้มเหลวในการคัดลอกและวางตัวอย่างที่ให้มาทั้งหมดจากหน้าไลบรารีของบุคคลที่สาม


1

เกิดข้อผิดพลาดในการแยกวิเคราะห์ XML: คำนำหน้าไม่ถูกผูก

ทรัพยากร '/ playteddy / res' ไม่มีอยู่

ฉันได้รับข้อผิดพลาดสองข้อข้างต้นและในที่สุดฉันก็แก้ไขได้

คลิกขวาที่โปรเจ็กต์ของคุณ -> properties -> java build path -> googleadmobadsdk (เลือกและวางไว้ด้านบนสุด) จากนั้นเรียกใช้และแก้ไขปัญหา ได้รับการแก้ไขข้อผิดพลาดรันไทม์ของฉัน


0

วางแหล่งที่มาในโฟลเดอร์นอกพื้นที่ทำงานของคุณ คลิกขวาใน project-explorer และเลือก "Import ... "

นำเข้าโครงการในพื้นที่ทำงานของคุณเป็นโครงการ Android พยายามสร้างและตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายเป็นโครงการห้องสมุด ตรวจสอบให้แน่ใจว่าสร้างด้วยการรองรับ Google API ถ้าไม่คุณจะได้รับข้อผิดพลาดในการคอมไพล์

จากนั้นคลิกขวาที่โครงการหลักของคุณในตัวสำรวจโครงการ เลือกคุณสมบัติจากนั้นเลือก Android ทางด้านซ้าย ในส่วนไลบรารีด้านล่างคลิก "เพิ่ม" ..

ตอนนี้ไลบรารี mapview-balloon สามารถเพิ่มลงในโครงการของคุณได้แล้ว ..


0

ไปที่ build path ใน eclipse จากนั้นคลิก order และ export จากนั้นตรวจสอบ library / jar จากนั้นคลิกปุ่มขึ้นเพื่อย้ายไปที่ด้านบนสุดของรายการเพื่อคอมไพล์ก่อน

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