ฉันจะใช้ JAR ภายนอกในโครงการ Android ได้อย่างไร


326

ฉันได้สร้างโครงการ Android และเพิ่ม JAR ภายนอก (hessian-4.0.1.jar) ในโครงการของฉัน ฉันเพิ่ม JAR ลงในพา ธ บิลด์แล้วทำเครื่องหมายในการสั่งซื้อและส่งออก

ดูเหมือนว่าการสั่งซื้อและส่งออกจะไม่ปรากฏและคลาสทั้งหมดจาก JAR ภายนอกจะหายไปเมื่อรันไทม์

มีเคล็ดลับในการรวมคลาสที่ต้องการจาก JAR ภายนอกเมื่อสร้างแอปพลิเคชัน Android โดยใช้ปลั๊กอิน Eclipse หรือไม่? ฉันไม่ต้องการใช้มดหรือ Maven


1
ดังที่คุณทราบแล้ว: สิ่งนี้เกิดจากการพึ่งพาใน hessian-4.0.1.jar หากคุณต้องการใช้ Hessian กับ Android ให้ใช้ Hessdroid ( code.google.com/p/hessdroid ) ไม่ได้ใช้งานมาก แต่ทำงานได้ดีสำหรับฉันแม้ใน Android 4.0
Ice09

1
ดูเพิ่มเติมที่"NoClassDefFoundError สำหรับรหัสในไลบรารี Java บน Android"สำหรับปัญหาทั่วไปเมื่อใช้ไหภายนอก วิธีง่ายๆ
Flow

คำตอบ:


443

สำหรับ Eclipse

วิธีที่ดีในการเพิ่ม JAR ภายนอกให้กับโครงการ Android ของคุณหรือโครงการ Java ใด ๆ คือ:

  1. สร้างโฟลเดอร์ที่เรียกว่าlibsในโฟลเดอร์รูทของโปรเจค
  2. คัดลอกไฟล์ JARของคุณไปยังlibsโฟลเดอร์
  3. ตอนนี้คลิกขวาที่ไฟล์ Jar จากนั้นเลือก Build Path> Add to Build Pathซึ่งจะสร้างโฟลเดอร์ที่ชื่อว่า 'Referenced Libraries' ภายในโครงการของคุณ

    ด้วยการทำเช่นนี้คุณจะไม่สูญเสียห้องสมุดที่ถูกอ้างอิงบนฮาร์ดไดรฟ์ของคุณทุกครั้งที่คุณโอนโครงการของคุณไปยังคอมพิวเตอร์เครื่องอื่น

สำหรับ Android Studio

  1. หากคุณอยู่ในAndroid View ใน project explorer ให้เปลี่ยนเป็นมุมมองโปรเจ็กต์ด้านล่าง

ภาพหายไป

  1. คลิกขวาที่โมดูลที่คุณต้องการเพิ่มไลบรารีภายนอกจากนั้นเลือกใหม่> Directroyและตั้งชื่อเป็น ' libs '
  2. ตอนนี้คัดลอกblah_blah.jarลงในโฟลเดอร์ ' libs '
  3. คลิกขวาที่ blah_blah.jar แล้วเลือก ' เพิ่มเป็นห้องสมุด .. ' สิ่งนี้จะเพิ่มและป้อนข้อมูลในbuild.gradleเป็นไฟล์คอมไพล์ ('libs / blah_blah.jar')และซิงค์การไล่ระดับสี และคุณทำเสร็จแล้ว

โปรดทราบ:หากคุณใช้ห้องสมุดบุคคลที่สามจะเป็นการดีกว่าถ้าคุณใช้การอ้างอิงสกรรมกริยาซึ่งสคริปต์ Gradle จะดาวน์โหลด JAR และ JAR ที่อ้างอิงโดยอัตโนมัติเมื่อรันสคริปต์ Gradle

ตัวอย่าง: คอมไพล์ 'com.google.android.gms: play-services-ads: 9.4.0'

อ่านเพิ่มเติมเกี่ยวกับGradle Dependency Mangement


49
หมายเหตุว่าเมื่อใช้ล่าสุดรุ่น Eclipse / ADT ขวดภายนอกต้องอยู่ในโฟลเดอร์ที่เรียกว่าlibs(แทนlib)
THelper

4
@THelper - ขอบคุณ! คุณถูกต้องโฟลเดอร์จะต้องมีชื่อว่า "libs" และไม่ใช่ "lib" ฉันต่อสู้กับปัญหานี้
Camille Sévigny

7
ใน SDK รุ่นล่าสุดขั้นตอนที่ 3 (เพิ่ม JAR ด้วยตนเองในเส้นทางการสร้าง) ไม่จำเป็น แต่ถ้าคุณมี IDE เช่น Eclipse เปิดในเวลาที่คุณปล่อยไฟล์คุณจะต้องรีเฟรชโครงการ (F5 และ / หรือเมนูบริบทรีเฟรชใน Package Explorer)
Jon Adams

4
มันทำจากบรรทัดคำสั่งได้อย่างไร ไฟล์การกำหนดค่าใดที่ฉันต้องแก้ไขและอย่างไร
Kristian Spangsege

13
วิธีการนี้ได้รับมาจากวันที่ตั้งแต่ช่วงต้นปี 2012 เพียงแค่เพิ่ม JAR libs/ไป อย่าแก้ไขพา ธ บิลด์ด้วยตนเอง
CommonsWare

127

ใช่คุณสามารถใช้มัน นี่คือวิธี:

  1. โครงการของคุณ -> คลิกขวา -> นำเข้า -> ระบบไฟล์ -> yourjar.jar
  2. โครงการของคุณ -> คลิกขวา -> คุณสมบัติ -> เส้นทางสร้าง Java -> ไลบรารี -> เพิ่ม Jar -> yourjar.jar

วิดีโอนี้อาจมีประโยชน์ในกรณีที่คุณมีปัญหา


5
วิธีการนี้ล้าสมัยตั้งแต่ต้นปี 2012 เพียงเพิ่ม JAR ไปยัง libs / อย่าแก้ไขพา ธ บิลด์ด้วยตนเอง
CommonsWare

ฉันลองเพิ่มวิธีสร้างเส้นทางแบบต่างๆ ด้วยวิธีนี้ฉันสามารถแก้ไขข้อผิดพลาด Class ไม่พบหลังจากโอนย้ายโครงการหนึ่งไปยังพีซีเครื่องอื่น
มิกกี้

วิธีการแก้ปัญหา FIRST ล้าสมัยและไม่ทำงานตามปกติ
Yousha Aleayoub

5

ขณะนี้ฉันใช้ SDK 20.0.3 และไม่มีวิธีแก้ไขปัญหาก่อนหน้านี้สำหรับฉันเลย

เหตุผลที่ hessdroid ทำงานที่ hess ล้มเหลวเนื่องจากไฟล์ jar สองไฟล์มีจาวาที่ถูกคอมไพล์สำหรับเครื่องเสมือนที่แตกต่างกัน รหัสไบต์ที่สร้างโดยคอมไพเลอร์ Java ไม่รับประกันว่าจะทำงานบนเครื่องเสมือน Dalvik โค้ดไบต์ที่สร้างโดยคอมไพเลอร์ Android ไม่รับประกันว่าจะทำงานบนเครื่องเสมือน Java

ในกรณีของฉันฉันสามารถเข้าถึงซอร์สโค้ดและสามารถสร้างไฟล์ jar Android โดยใช้วิธีที่ฉันอธิบายไว้ที่นี่: https://stackoverflow.com/a/13144382/545064


5

ฉันรู้ว่า OP สิ้นสุดคำถามของเขาโดยอ้างอิงกับปลั๊กอิน Eclipse แต่ฉันมาถึงที่นี่พร้อมการค้นหาที่ไม่ได้ระบุ Eclipse ดังนั้นที่นี่ไปสำหรับ Android Studio:

  1. เพิ่มjarไฟล์ไปยังไดเรกทอรี libs (เช่นคัดลอก / วาง)
  2. คลิกขวาที่jarไฟล์และเลือก "เพิ่มเป็นห้องสมุด ... "
  3. คลิก "ตกลง" ในกล่องโต้ตอบถัดไปหรือเปลี่ยนชื่อหากคุณเลือก

แค่นั้นแหละ!


4

ปรากฎว่าฉันดูไม่ดีพอในการติดตามสแต็กของฉันปัญหาไม่ได้ว่า JAR ภายนอกไม่ได้รวมอยู่ด้วย

ปัญหาคือแพลตฟอร์ม Android หายไป javax.naming. * และแพ็คเกจอื่น ๆ อีกมากมายที่ JAR ภายนอกมีการขึ้นต่อกันเช่นกัน

การเพิ่มไฟล์ JAR ภายนอกและการตั้งค่าการสั่งซื้อและส่งออกใน Eclipse ทำงานตามที่คาดไว้กับโครงการ Android


3

ไปที่โครงการปัจจุบัน

RightClick-> Properties-> Java Build Path-> เพิ่มไฟล์ Jar ลงในไลบรารี -> คลิกตกลง

จากนั้นจะถูกเพิ่มลงในไฟล์ไลบรารีที่อ้างอิงในโครงการปัจจุบันของคุณ


1

Java API ของ Android ไม่รองรับ javax.naming. * และ javax อื่น ๆ อีกมากมาย คุณต้องรวมการพึ่งพาเป็นขวดแยกต่างหาก


1

หากใช้ Android Studio ให้ทำดังต่อไปนี้ (ฉันได้คัดลอกและแก้ไข @Vinayak Bs answer):

  1. เลือกมุมมองโครงการในมุมมองโครงการ (แทนที่จะเป็นแพคเกจหรือ Android)
  2. สร้างโฟลเดอร์ชื่อlibsในโฟลเดอร์รูทของโปรเจค
  3. คัดลอกไฟล์ JAR ของคุณไปยังโฟลเดอร์ libs
  4. ภาพด้านข้างจะได้รับการอัปเดตและไฟล์ JAR จะปรากฏในโครงการของคุณ
  5. ตอนนี้คลิกขวาที่ไฟล์ JAR แต่ละไฟล์ที่คุณต้องการนำเข้าแล้วเลือก "เพิ่มเป็นห้องสมุด ... " ซึ่งจะรวมไว้ในโครงการของคุณ
  6. หลังจากนั้นสิ่งที่คุณต้องทำคืออ้างอิงคลาสใหม่ในโค้ดของคุณเช่น import javax.mail.*

1

ใน android studio หากใช้ gradle

เพิ่มลงใน build.gradle

compile fileTree(dir: 'libs', include: ['*.jar'])

และเพิ่มไฟล์ jar ลงในโฟลเดอร์ libs


1

หากคุณกำลังใช้ระบบ build gradleให้ทำตามขั้นตอนเหล่านี้:

  1. วางjarไฟล์ภายในlibsโฟลเดอร์ที่เกี่ยวข้องของแอพ android ของคุณ คุณมักจะพบว่าที่Project> >app libsหากlibsโฟลเดอร์หายไปให้สร้างขึ้นใหม่

  2. เพิ่มนี้ที่คุณไฟล์ของคุณbuild.gradle app(เพื่อไม่ให้คุณProject's build.gradle)

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        // other dependencies
    }

    ซึ่งจะรวมjarไฟล์ทั้งหมดของคุณที่มีอยู่ในlibsโฟลเดอร์

หากไม่ต้องการรวมjarไฟล์ทั้งหมดคุณสามารถเพิ่มทีละไฟล์ได้

compile fileTree(dir: 'libs', include: 'file.jar')


0

สร้างโฟลเดอร์ (เช่น lib) ภายในโครงการของคุณคัดลอก jar ของคุณไปยังโฟลเดอร์นั้น ตอนนี้ไปที่การกำหนดค่าเส้นทางสร้างจากคลิกขวาที่โครงการที่มีในการเลือกเส้นทางการสร้าง

'เพิ่ม jar' ไปที่โฟลเดอร์ที่คุณสร้างและเลือก jar


0

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

ในการแก้ปัญหานี้คุณจะต้องเพิ่ม jar เป็นไฟล์ที่เชื่อมโยงไปยังโครงการของคุณแทนที่จะนำเข้า (ซึ่งจะคัดลอกภายในเครื่อง)

ใน UI เลือก:

โครงการ -> นำเข้า -> ระบบไฟล์ -> yourjar.jar -> (พื้นที่ตัวเลือก) ขั้นสูง -> สร้างลิงค์ในพื้นที่ทำงาน

ลิงก์ถูกบันทึกในไฟล์. project :

<linkedResources>
    <link>
        <name>yourjar.jar</name>
        <type>1</type>
        <locationURI>PARENT-5-PROJECT_LOC/bin/android_ndk10d_armeabi-v7a/yourjar.jar</locationURI>
    </link>
</linkedResources>

PARENT-5-PROJECT_LOC หมายถึงสัมพันธ์กับไฟล์โครงการ 5 ไดเรกทอรีขึ้นไป (../../../../../)

จากนั้นเพิ่มลงในไลบรารี:
โครงการ -> คุณสมบัติ -> เส้นทาง Java Build -> ไลบรารี -> เพิ่ม Jar -> yourjar.jar

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

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