สร้างห้องสมุด Android Jar เพื่อจำหน่าย


160

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

ฉันกำลังมองหาวิธีการสร้างและแจกจ่ายไลบรารี่แบบโอเพ่นซอร์สที่สามารถใช้ในโครงการ Android อื่น ๆ เช่น JAR แบบดั้งเดิม สิ่งนี้จะต้องมีการใช้งานคอมไพเลอร์ Android ดังนั้นจึงไม่ใช่ไฟล์ vanilla-Java JAR FWIW ฉันไม่จำเป็นต้องฝังทรัพยากร / โครงร่างใน JAR

ฉันเคยเห็นhttp://andparcel.com/แต่มันให้ความรู้สึกเหมือนเป็นการแก้ปัญหาและฉันอยากจะใช้บางสิ่งที่ 'สนับสนุนอย่างเป็นทางการ' โดย Google นอกจากนี้ฉันต้องตรวจสอบให้แน่ใจว่า JAR ที่ฉันสร้างนั้นสามารถใช้งานร่วมกับ Android SDK เวอร์ชันเก่า / ใหม่ได้ (เช่นฉันต้องการวิธีตั้งค่าเวอร์ชันแพลตฟอร์มเป้าหมาย ฯลฯ )

ชุดเครื่องมือ Android ล่าสุดอนุญาตให้สร้าง / ใช้ไบนารี JAR หรือไม่ คุณสามารถชี้ไปที่เอกสารบางอย่างเกี่ยวกับวิธีที่ฉันสามารถทำได้?


คุณได้รับคำตอบสำหรับคำถามของคุณหรือไม่ ฉันมีข้อกำหนดที่คล้ายกัน .. คุณสร้างไฟล์ jar อย่างไร?
Krishnabhadra

ในการเผยแพร่. jar สำหรับ Android คุณไม่จำเป็นต้องใช้คอมไพเลอร์ Android dx การทำงานของ Java complier ปกติ หากคุณแจกจ่ายไหมันจะถูกแปลงเป็น dx bytecode เมื่อสร้างแอป
ThomasW

คำตอบ:


49

หากคุณสร้างโครงการห้องสมุด Android โดยไม่ต้องมีทรัพยากรใด ๆ ADT (สังเกตเห็นครั้งแรกใน r16) จะสร้าง. jar ด้วยชื่อเดียวกันกับโครงการในโฟลเดอร์ 'bin'


กรุณาดูคำถามนี้stackoverflow.com/questions/12970802/…
vnshetty

1
สิ่งนี้ทำให้ฉันได้รับขวด แต่ฉันยังต้องกระจายโฟลเดอร์ทรัพยากรหรือไม่ การพยายามที่จะทำให้เชอร์ล็อค actionbar และโครงการของฉันจะไม่คอมไพล์เพราะพวกเขาไม่สามารถหาทรัพยากรของ actionbar ได้
Nathan Schwermann

1
@ schwiz นี้ใช้งานได้เฉพาะกับโครงการที่ไม่ใช่ทรัพยากร (เช่นฉันระบุไว้ในคำตอบ) ไม่เช่นนั้นคุณจะต้องนำเข้าเป็นโครงการ Android Library มาตรฐาน
Freddroid

1
สิ่งนี้ยังคงเป็นจริงหรือไม่? ฉันไม่เห็นmyapp.jarใน/binโฟลเดอร์ มีclasses.jarแต่นั่นไม่ใช่มันใช่มั้ย
garbagecollector

ฉันใช้ ADT ล่าสุดและฉันยังได้รับ <ชื่อโครงการ> .jar ในโฟลเดอร์ / bin ของฉัน แต่ถ้าโครงการของคุณขึ้นอยู่กับทรัพยากรที่มันไม่ดีและความจำเป็นของโครงการที่จะรวมเป็นโครงการห้องสมุด (คุณยังคงได้รับ แต่ไห.
Freddroid

23

Android ไม่มี Android-JAR ชนิดพิเศษ แต่สิ่งที่คุณสามารถทำได้คือการเพิ่ม build.xml ให้กับโครงการของคุณและสร้าง JAR ด้วย ant

build.xml ของฉันมีลักษณะเช่นนี้:

<project name="MyAndroidLib" default="dist" basedir=".">
  <description>
This is my Android lib
  </description>
  <!-- set global properties for this build -->
  <property name="src" location="src" />
  <property name="bin" location="bin" />

  <target name="jar">
    <jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
      <!-- replace 'com' by what ever you are using -->
      <!-- as first part of the package name -->
      <!-- e.g. de, org, ... -->
      <!-- the ** is important to include the directory recursively -->
      <include name="com/**" />
    </jar>
  </target>
</project>

สร้าง JAR โดยรันant jarในโฟลเดอร์หลักของโปรเจ็กต์ของคุณ


พยายามทำสิ่งนี้และสามารถสร้างไฟล์ JAR ได้ แต่ขนาดนั้นแปลก (เพียง 343 ไบต์) เมื่อเปรียบเทียบกับเมื่อส่งออกไลบรารีไปยัง JAR ความคิดเกี่ยวกับธงใดหายไป?
เชนโอลิเวอร์

คุณสามารถตรวจสอบเนื้อหาของ JAR ด้วยโปรแกรมเก็บถาวร (JAR คือ ZIP) และดูว่ามีอะไรขาดหายไปและเพิ่มเข้าไป คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่: ant.apache.org/manual/Tasks/jar.html
white_gecko

5
ด้วย SDK ของ Android ล่าสุดไฟล์ Java จะถูกคอมไพล์bin/classesดังนั้น<jar destfile="MyAndroidLib.jar" basedir="bin/">ควรเป็น<jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
Theo

17

คุณสามารถสร้างโครงการ Java "ปกติ" และนำเข้าจากที่นั่น Android.jar จากนั้นคุณจะสามารถเข้าถึงทุกองค์ประกอบใน SDK จากนั้นคุณสามารถส่งออกโครงการเป็น jar ... และโหลดจากแอพ Android ของคุณ มันใช้งานได้ดีและดูเหมือนจะเป็นวิธีที่ตรงไปตรงมาที่จะทำ


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

@ferostar ฉันจะนำเข้า android.jar ไปยังโครงการ java ได้อย่างไร
Krishnabhadra

ในกรณีที่ห้องสมุดมีทรัพยากร, วิธีการสร้าง R.java และเพิ่มลงใน JAR

15

เพียงไปที่คุณสมบัติของโครงการที่คุณต้องการทำ jar.Click บนแท็บ Android และทำเครื่องหมายในไลบรารี Is ตอนนี้คุณสามารถเห็นไฟล์. jar ในโฟลเดอร์ bin ใช้งานได้ตามที่คุณต้องการใช้


2
ดูเหมือนว่าจะใช้งานได้หาก LibraryProject ไม่มีทรัพยากร มีความคิดว่าจะให้มันทำงานกับทรัพยากรได้อย่างไร?
Nathan Schwermann

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

10

โซลูชันเดียวที่ 'สนับสนุนอย่างเป็นทางการ' โดย Google คือโครงการห้องสมุดและต้องการให้แจกจ่ายซอร์สโค้ด คุณสามารถสร้าง JAR ด้วยวิธีปกติ แต่คุณไม่สามารถรวมหรืออ้างอิงทรัพยากรภายใน

น่าเสียดายที่ฉันคิดว่ามันเป็นไปไม่ได้ที่จะรวม JAR ที่ทำแพ็กเกจไว้ในโครงการ Library เพื่อหลีกเลี่ยงข้อกำหนดซอร์สโค้ด


"คุณสามารถสร้าง JAR ด้วยวิธีปกติ แต่คุณไม่สามารถรวมหรืออ้างอิงทรัพยากรได้" <- ดูเหมือนจะใช้งานไม่ได้ใน Eclipse ถ้าฉันอ้างอิงคลาส Android หรือใช้คอมไพเลอร์ Android รู้วิธีการใช้งาน
Psychotik

5
ฉันเพิ่งสร้างโครงการ Java ปกติใน Eclipse เพิ่ม android.jar ไปยังเส้นทางการสร้างแล้วเลือกส่งออก - ไฟล์ Java - Jar
Jeff Gilfelt

@JeffGilfelt และหากคุณรวม android.jar สำหรับไดเรกทอรี android-13 sdk ในตัวอย่างคุณจะสามารถใช้ไลบรารี jar ของคุณในโครงการระดับ API ที่สูงขึ้นได้หรือไม่
Fran Marzoa

10

ใน build ล่าสุดของ Android Studio 1.2 การสร้างไลบรารี JAR นั้นทำได้ง่ายเพียงแค่ชี้และคลิก

ขั้นตอนในการปฏิบัติตาม:

  • ไปที่ไฟล์ -> ใหม่ -> โมดูลใหม่ ป้อนคำอธิบายรูปภาพที่นี่
  • เลือก "Java Library" ที่ท้ายรายการตัวเลือก ป้อนคำอธิบายรูปภาพที่นี่
  • ป้อนชื่อของ jar lib และชื่อของคลาสในนั้นและกดปุ่มเสร็จสิ้น ป้อนคำอธิบายรูปภาพที่นี่
  • แค่นั้นแหละ !

ขั้นตอนต่อไปคือการเพิ่ม Jar Library ของคุณเป็นการพึ่งพาในแอปของคุณ ง่ายเหมือนที่เพิ่ง

  • ไปที่ไฟล์ -> โครงสร้างโครงการ -> เลือก 'แอพ' -> เลือก 'การพึ่งพา'
  • เลือก '+' ที่ด้านล่าง -> เลือก 'การพึ่งพาโมดูล' ป้อนคำอธิบายรูปภาพที่นี่
  • เลือกโมดูล jar lib ที่คุณเพิ่งสร้างขึ้นด้านบน ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่
  • เลือกตกลงแล้วก็!

.... หรือคุณสามารถเพิ่มบรรทัดด้านล่างลงในไฟล์ gradle แอปของคุณ

dependencies {
      compile fileTree(dir: 'libs', include: ['*.jar']) // Default Gradle Task, should be already present
      compile 'com.android.support:appcompat-v7:21.0.3' // Default Gradle Task, should be already present

      compile project(':nameOfYourJarLibraryModule') // This is your jar library module
 }

Google กำลังโปรโมต Android Archive (AAR) แม้ว่า JAR ที่รองรับจะถูกนำกลับมาที่ android studio เพื่อค้นหาความแตกต่างระหว่าง AAR และ JAR ให้อ้างอิงลิงค์นี้


ฉันไม่เข้าใจว่าสิ่งนี้จะสร้างไฟล์ jar ใหม่ได้อย่างไร ดูเหมือนว่าคุณเพิ่งสร้างโมดูลใหม่ซึ่งจะใช้เป็นห้องสมุดในโครงการ Android ของคุณ
Jejefcgb

อะไร?! คุณสร้างขวดใหม่จากอะไร?
Ewoks

@Ewoks: หลังจากที่คุณสร้างโมดูลแล้วคุณต้องเพิ่มคลาสเข้าไป เมื่อเสร็จแล้วคุณเพิ่มมันเป็นการพึ่งพา
Nishant

2
คำถามคือ: มีห้องสมุดที่มีการฝังที่มีซอร์สโค้ด วิธีการทำไห้มันแค่ใช้กระปุกในโครงการอื่นแทนที่จะเป็นซอร์สโค้ดไลบรารีทั้งหมด .. หรือฉันพลาดอะไรไป?
Ewoks

2
@Nishant ทำงานให้ฉัน! ขอบคุณ!
ramires.cabral

6

ลองสิ่งนี้: ใช้งานได้

1) ทำให้โครงการห้องสมุดของคุณเป็นโครงการปกติโดยยกเลิกการเลือกธง IsLibrary

2) ดำเนินการโครงการของคุณเป็นแอปพลิเคชัน Android (มันจะไม่แสดงข้อผิดพลาดใด ๆ )

3) คุณจะพบไฟล์. jar ในโฟลเดอร์ bin พร้อมกับ. apk

4) ให้. jar ผู้ที่ต้องการใช้ห้องสมุดของคุณ

5) บอกให้พวกเขานำเข้า jar ภายนอกเข้าสู่เส้นทางการสร้าง

สิ่งนี้จะทำงานได้ดีกับทรัพยากรทั้งหมด ขอให้โชคดี


1
ฉันต้องแก้ไขโพสต์นี้: ไฟล์ JAR สามารถมีรหัสเท่านั้นไม่มีทรัพยากร Android หากมีทรัพยากร / สิ่งจำเป็นรวมอยู่เราต้องเปิดโครงการห้องสมุดและไม่สามารถใช้ไฟล์ JAR แบบธรรมดาได้
ดี้

@cody: เราจะสร้างไฟล์ jar พร้อมกับทรัพยากรและใช้ในโครงการอื่นได้อย่างไร
Mahantesh M Ambi

1

ADT สร้างโฟลเดอร์ bin ซึ่งมีไฟล์คลาสทั้งหมดสำหรับไฟล์ต้นฉบับและไดเรกทอรีที่ตรงกันทั้งหมดในโครงการของคุณคุณสามารถใช้คำสั่ง jar สร้างไฟล์เก็บถาวร jar ที่มีไฟล์และไดเรกทอรีคลาสเหล่านี้และแน่นอนว่าห้องสมุดของคุณ ระดับแพลตฟอร์มไฟล์คลาสจะถูกกำหนดเป้าหมายสำหรับระดับปัจจุบันของการสร้างโครงการเท่านั้นคุณจะต้องใช้ไฟล์ jar ที่แตกต่างกันสำหรับแต่ละระดับแพลตฟอร์ม อย่างไรก็ตามสิ่งที่ดีเกี่ยวกับเรื่องนี้คือไฟล์ R.class รวมอยู่ในแผนผังไดเรกทอรีโครงการและคุณสามารถเข้าถึงทรัพยากรได้ ฉันไม่รู้ว่านี่เป็นวิธีที่เป็นทางการในการทำสิ่งต่าง ๆ ใน Android หรือไม่ แต่มันก็ใช้ได้สำหรับฉัน


0

ในโครงการของเราเรากำลังสร้าง apk (โดยใช้ apkbuilder) ซึ่งติดตั้งใน / system / framework และเพิ่ม apk นี้ใน classpath เริ่มต้น สำหรับการรวบรวมแอปพลิเคชันโดยใช้ jar เรากำลังสร้างไฟล์ jar (โดยใช้ jar c)

หมายเหตุ: เราไม่มีทรัพยากรใด ๆ ในห้องสมุด


0

.jar เป็นเพียงไฟล์. zip ซึ่งมีไฟล์. class (คุณสามารถลองเปลี่ยนนามสกุลของ. jar ไฟล์เป็น. zip จากนั้นดูผลลัพธ์) ได้อย่างง่ายดายคุณสามารถสร้างไลบรารี. jar ใด ๆ เพื่อวัตถุประสงค์ใด ๆ โดยการซิปไฟล์. class


ไม่เป็นความจริงอย่างเคร่งครัดโปรดดูen.wikipedia.org/wiki/JAR_(file_format)สำหรับความแตกต่างที่ลึกซึ้ง (ส่วนใหญ่จะเรียงลำดับรายการภายใน ZIP)
iddo

0

ขั้นตอน:

1) เปิดไฟล์project.properties

2) เพิ่มมูลค่า android.library=true

3) บันทึกไฟล์

4) จากเมนู eclipse สำหรับโครงการเลือกbuild โดยอัตโนมัติแล้วเลือกclean

ส่งผลให้เกิด: แบรนด์ใหม่ขวดจะถูกสร้างขึ้นภายใต้ถัง

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