วิธีรวมแพ็คเกจ aar ภายนอกด้วยตนเองโดยใช้ Gradle Android Build System ใหม่


406

ฉันกำลังทดลองกับระบบ android build ใหม่และฉันพบปัญหาเล็กน้อย ฉันได้รวบรวมแพคเกจ aar ของฉันเองของ ActionBarSherlock ซึ่งฉันเรียกว่า 'actionbarsherlock.aar' สิ่งที่ฉันพยายามทำคือใช้ aar นี้เพื่อสร้าง APK สุดท้ายของฉัน ถ้าฉันรวมทั้งไลบรารี ActionBarSherlock ทั้งหมดเป็นโมดูล android-library ในโครงการหลักของฉันโดยใช้โครงการคอมไพล์ (': actionbarsherlock') ฉันสามารถสร้างได้สำเร็จโดยไม่มีปัญหาใด ๆ

แต่ปัญหาของฉันคือฉันต้องการให้การอ้างอิงเป็นแพคเกจไฟล์ aar ด้วยตนเองถ้าฉันเป็น JAR ฉันก็ดูเหมือนจะไม่สามารถหาวิธีที่จะรวมไว้ในโครงการของฉันได้อย่างถูกต้อง ฉันพยายามใช้การกำหนดค่าการคอมไพล์แล้ว แต่ดูเหมือนจะไม่ทำงาน ฉันยังคงหาสัญลักษณ์ไม่พบในระหว่างการคอมไพล์ซึ่งบอกฉันว่า classes.jar จากแพ็คเกจ aar ไม่ได้ถูกรวมอยู่ใน classpath

ไม่มีใครรู้ว่าไวยากรณ์เพื่อรวม aar แพ็คเกจเป็นไฟล์ด้วยตนเองหรือไม่?

build.gradle

buildscript {

 repositories {
     mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.4'
  }
}
apply plugin: 'android'

repositories {
   mavenCentral()
}
dependencies {
    compile files('libs/actionbarsherlock.aar')
}

android {
    compileSdkVersion 15
    buildToolsVersion "17.0"
}

แก้ไข: ดังนั้นคำตอบคือไม่รองรับปัจจุบันนี่คือปัญหาหากคุณต้องการติดตาม

แก้ไข: ขณะนี้ยังไม่ได้รับการสนับสนุนโดยตรงทางเลือกที่ดีที่สุดน่าจะเป็นทางออกที่เสนอจาก @RanWakshlak

แก้ไข: ง่ายกว่าด้วยการใช้ไวยากรณ์ที่เสนอโดย @VipulShah


พิจารณาการตอบสนองของ Vipul Shah: ในที่สุดมันก็ใช้งานได้สำหรับฉันโดยไม่มีที่เก็บ maven ท้องถิ่นเช่นเดียวกับ Android Studio 0.5.8
shkschneider

ดูคำถามของฉันและตอบคำถามได้ที่นี่stackoverflow.com/a/31662782/746347
mixel

หากคุณใช้ Gradle 3.0.0 หรือสูงกว่าการตั้งค่า Gradle แบบง่ายนี้เหมาะกับฉัน: stackoverflow.com/questions/29081429/…
user1506104

คำตอบ:


670

โปรดทำตามขั้นตอนด้านล่างเพื่อให้มันใช้งานได้ (ฉันได้ทดสอบจนถึง Android Studio 2.2 แล้ว)

ให้บอกว่าคุณเก็บไฟล์ aar ไว้ในโฟลเดอร์ libs แล้ว (สมมติว่าชื่อไฟล์คือcards.aar)

จากนั้นในแอปbuild.gradleระบุต่อไปนี้และคลิกซิงค์โครงการที่มีไฟล์ Gradle เปิด build.gradle ระดับโปรเจ็กต์และเพิ่มflatDir{dirs 'libs'}เช่นเคยด้านล่าง

allprojects {
   repositories {
      jcenter()
      flatDir {
        dirs 'libs'
      }
   }
}

และตอนนี้เปิดไฟล์ build.grdle ระดับแอปและเพิ่ม.aarไฟล์

    dependencies {
       compile(name:'cards', ext:'aar')
}

หากทุกอย่างเป็นไปด้วยดีคุณจะเห็นรายการไลบรารีถูกสร้างขึ้นใน -> exploded-aar

นอกจากนี้โปรดทราบว่าหากคุณกำลังนำเข้าไฟล์. aar จากโครงการอื่นที่มีการอ้างอิงคุณจะต้องรวมไฟล์เหล่านี้ไว้ใน build.gradle ของคุณด้วย


5
@VipulShah อยู่ที่ไหนไดเรกทอรี libs?
StuStirling

2
อาจจะได้รับคำแนะนำให้ทำการแก้ไขในโมดูลแอพ 'build.gradle' และไม่ใช่ในโฟลเดอร์ 'build.gradle' ด้านบน
loloof64

3
พบคำตอบสำหรับคำถามของฉันด้านบน: แทนที่จะcompileพึ่งพาเพิ่มสองอ้างอิงdebugCompile(name:'cards-debug', ext:'aar')และreleaseCompile(name:'cards-release', ext:'aar')
Iftah

2
อย่าสับสนกับรหัสตัวอย่าง บล็อกแรกที่allprojects {...}ไปที่ไฟล์ "ระดับ" การไล่ระดับและส่วนที่สองที่มีdependencies {...}ควรไปที่ไฟล์ระดับ "แอป"
คิริลล์คาร์มาซิน

8
โปรดอัปเดตคำตอบของคุณ: คำเตือน: การกำหนดค่า 'รวบรวม' ล้าสมัยและถูกแทนที่ด้วย 'การนำไปใช้' และ 'api' มันจะถูกลบออกในตอนท้ายของปี 2018 สำหรับข้อมูลเพิ่มเติมดู: d.android.com/r/tools/update-dependency-configurations.html
B-GangsteR

248
  1. คลิกขวาที่โครงการของคุณและเลือก"ตั้งค่าเปิดโมดูล"

เปิดการตั้งค่าโมดูล

  1. คลิกปุ่ม"+"ที่มุมบนซ้ายของหน้าต่างเพื่อเพิ่มโมดูลใหม่

เพิ่มโมดูลใหม่

  1. เลือก"นำเข้าขวดหรือ .AAR แพคเกจ"และคลิก"ถัดไป"ปุ่ม

นำเข้า AAR

  1. ค้นหาไฟล์ AAR โดยใช้ปุ่มจุดไข่ปลา"... "ข้างฟิลด์ "ชื่อไฟล์"

ค้นหาไฟล์ AAR

  1. เลือกโมดูลของแอพและคลิกที่บานหน้าต่างการพึ่งพาเพื่อเพิ่มโมดูลใหม่เป็นการพึ่งพา

บานหน้าต่างการอ้างอิง

  1. ใช้"+"ปุ่มการอ้างอิงหน้าจอและเลือก"การพึ่งพาโมดูล"

เพิ่มการพึ่งพาโมดูล

  1. เลือกโมดูลและคลิก"ตกลง"

เลือกโมดูล


4
คำตอบที่ดีที่สุดโปรดจำไว้ว่าทำAlt+B> ทำความสะอาดและสร้างโครงการใหม่ Android Studio ทำไมคุณถึงเจ็บปวด! ฉันต้องการให้ NetBeans IDE เป็นแพลตฟอร์มสำหรับนักพัฒนาซอฟต์แวร์ Android
java acm

@Oliver คุณยอดเยี่ยมมาก!
ankit purwar

คุณดีที่สุด!
codezombie

2
ไม่ใช่ความคิดที่ดีที่สุดในการสร้างโมดูลใหม่ทุกครั้งที่คุณต้องการเพิ่มaarlib ลงในโครงการของคุณ
Kirill Karmazin

คุณยอดเยี่ยมมากเพื่อนของฉัน !! ไชโยกับสิ่งนี้
Timothy Macharia

111

คุณสามารถอ้างอิงไฟล์ aar จากที่เก็บ maven เป็นตัวเลือก แต่มีวิธีแก้ไขที่ง่ายกว่า: ใส่ไฟล์ aar ในไดเร็กทอรี libs ของคุณและเพิ่มที่เก็บไดเรกทอรี

    repositories {
      mavenCentral()
      flatDir {
        dirs 'libs'
      }
    }

จากนั้นอ้างอิงไลบรารีในส่วนอ้างอิง:

  dependencies {
        implementation 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}

คุณสามารถตรวจสอบการโพสต์บล็อก Min'anสำหรับข้อมูลเพิ่มเติม


1
วิธีนี้ใช้งานได้ดีและดีกว่าคำตอบที่ได้รับการยอมรับ / สูงกว่าเพราะมันง่ายกว่าและฉันสามารถรวมไว้ในการควบคุมเวอร์ชันโดยไม่ต้องเพิ่มไฟล์ลงใน repo maven repo ของนักพัฒนาแต่ละคน (ถ้าฉันต้องทำอย่างนั้น ?) ขอบคุณ!
ajpolt

@ajpolt อาจจะแนะนำให้ตั้งค่าเซิร์ฟเวอร์ repo แทน (สำหรับ deps กรรมสิทธิ์) ดังนั้นคุณไม่จำเป็นต้องใส่มันลงในเครื่อง dev หรือในโฟลเดอร์ lib ของโปรเจค หากคุณมีเพียงหนึ่งพึ่งพาโยนมันลงใน maven โครงสร้างที่เก็บรหัส Google (เป็น repo temp)
Lo-Tan

4
จุดที่สำคัญที่สุดที่ควรทราบในคำตอบนี้คือการพูดถึง '@aar' เมื่อสิ้นสุดการพึ่งพา
Atharva

ฉันคิดว่านี้จะไม่ทำงานอีกต่อไปด้วยปลั๊กอิน gradle ล่าสุด: stackoverflow.com/questions/60878599/...
เดวิด

นี่คือคำตอบเดียวเท่านั้นที่รวมถึงรูปแบบที่ง่ายที่สุดพร้อมกับไวยากรณ์ที่ทันสมัยทั้งหมดรวมถึงimplementationอื่น ๆ นี่คือการคัดลอกวางโซลูชั่น upvotes ใหม่ ๆ เข้ามามากมายเพราะ Android Build Gradle Plugin 4.0.0 ตอนนี้โยนข้อผิดพลาดแทนที่จะเพิกเฉยเส้นทาง. aar ที่เสียหาย
Patrick

51

วิธีการด้านล่างใช้งานได้กับสตูดิโอ Android ล่าสุด (> v0.8.x):

  • บันทึกaarไฟล์ภายใต้โมดูลของแอปlibsโฟลเดอร์ (เช่น<project>/<app>/libs/myaar.aar)

  • เพิ่มด้านล่างเพื่อ build.gradle ของโฟลเดอร์โมดูล "แอพ" (ไม่ใช่ที่รูทโครงการ build.gradle ของคุณ) จดชื่อในบรรทัดการคอมไพล์มันคือ myaar @ aar ไม่ใช่ myaar.aar

    dependencies {
        compile 'package.name.of.your.aar:myaar@aar'
    }
    
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
  • คลิก Tools -> Android -> Sync Project with Gradle Files


3
ทำงานได้สมบูรณ์แบบใน AS 1.0
Pablo Johnson

1
ในกรณีที่มีคนต้องการถ้า gradle ทำงานได้ดี แต่คุณยังไม่เห็นคลาสให้เริ่ม Android Studio ใหม่ ...
htafoya

1
โซลูชันนี้ใช้งานได้ดีใน AS2.2 - การไล่ระดับเสียงเป็นเรื่องพิถีพิถันในเรื่องของไฟล์ AAR ที่น่าพิศวง
Jim Andreas

โปรดอัปเดตหรือลบการคอมไพล์ถูกคัดค้านและยังมีปัญหานี้: stackoverflow.com/questions/60878599//
เดวิด

49

ก่อน (เริ่มต้น)

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

เพียงเพิ่ม'*.aar'ในincludeอาร์เรย์

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

มันทำงานได้ดีบน Android Studio 3.x

ถ้าคุณต้องการละเว้นห้องสมุด? ทำเช่นนี้

implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')

1
ในขณะที่รหัสนี้อาจตอบคำถามให้บริบทเพิ่มเติมเกี่ยวกับวิธีการและ / หรือทำไมมันแก้ปัญหาจะปรับปรุงค่าระยะยาวของคำตอบ
Alexander

1
ทำงานได้ดีนี่คือวิธีที่จะไปหากห้องสมุดนั้นง่าย แต่นี่เป็นปัญหาที่นี่: คุณต้องนำเข้าไลบรารีทั้งหมดที่นำเข้ามาในไฟล์ aar ของคุณเพื่อให้ใช้งานได้ การนำเข้าจากไฟล์ aar จะไม่แพร่กระจายโดยใช้วิธีนี้
Tobliug

หรือง่ายยิ่งขึ้น:implementation fileTree(include: ['*.?ar'], dir: 'libs')
friederbluemle

@friederbluemle มากกว่าที่ง่ายกว่าฉันจะบอกว่าสั้นกว่าและในเวลาเดียวกันโดยไม่เจาะจงตามหลักวิชา
David

21

ฉันเพิ่งจะประสบความสำเร็จ!

  1. คัดลอกไฟล์mylib-0.1.aarไปยังlibs /โฟลเดอร์

  2. เพิ่มบรรทัดเหล่านี้ที่ด้านล่างของbuild.gradle (ควรเป็นแอพไม่ใช่โปรเจ็กต์):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
  3. จนถึงตอนนี้ดีมาก นี่คือจุดที่สำคัญที่สุด:

Gradle จำเป็นต้องเข้าถึงเครือข่ายเพื่อการอ้างอิงเว้นแต่จะเปิดใช้งานโหมดออฟไลน์

ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งานการทำงานออฟไลน์ผ่านช่องทำเครื่องหมายในโครงสร้างโครงการ / การไล่ระดับ

-- หรือ --

การกำหนดค่าการตั้งค่าพร็อกซี่เพื่อให้สามารถเข้าถึงเครือข่าย

ในการกำหนดการตั้งค่าพร็อกซีคุณต้องแก้ไขไฟล์gradle.propertiesของโครงการโดยกำหนดค่า http และ https แยกจากกันดังนี้:

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>

หวังว่างานนี้


โปรดอัปเดตหรือลบรวบรวมเลิกและยังมีปัญหานี้: stackoverflow.com/questions/60878599/...
เดวิด

20

ขณะนี้การอ้างอิงไฟล์. aar ท้องถิ่นไม่รองรับ (ตามที่ได้รับการยืนยันโดย Xavier Ducrochet)

สิ่งที่คุณสามารถทำได้แทนที่จะตั้งค่าที่เก็บ Maven ท้องถิ่น (ง่ายกว่าฟังดู) และอ้างอิง. aar จากตรงนั้น

ฉันเขียนบล็อกโพสต์โดยมีรายละเอียดวิธีทำให้ทำงานได้ที่นี่:

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds


ฉันไม่ได้จัดการเพื่อให้มันทำงานเมื่อสิ่งประดิษฐ์เป็นสแนปช็อตความคิดใด ๆ
tbruyelle

คุณได้รับการทำงานกับ Eclipse หรือสตูดิโอ Android เท่านั้นหรือไม่ ด้วย eclipse "gradle eclipse" เพิ่มไฟล์ aar ให้กับ classpath แต่ eclipse ไม่รู้จักคลาสภายใน
andrej_k

ตรวจสอบคำถามนี้stackoverflow.com/questions/20911665/…ถ้าหลังจากทำตามบทช่วยสอนไฟล์. aar ในพื้นที่ของคุณไม่พบ (บน Gradle 1.9 หรือสูงกว่า)
Maragues

โปรดอัปเดตหรือลบคำตอบนี้ล้าสมัยแล้ว
David

18

คุณสามารถเพิ่มการaarขึ้นต่อกันหลายครั้งด้วยโค้ดเพียงไม่กี่บรรทัด

เพิ่มที่flatDirเก็บในเครื่อง:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

เพิ่มทุกรายการaarในlibsไดเรกทอรีไปยังcompileการกำหนดค่าการพึ่งพา:

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}

วิธีนี้ใช้ได้ผล แต่จะตรวจสอบได้อย่างไรถ้ามีการเพิ่มการอ้างอิงแล้วเป็นการพึ่งพา Maven ฉันไม่ต้องการให้เพิ่มไฟล์ aar, PS: ฉันใช้สิ่งนี้เพื่อเขียนปลั๊กอินซึ่งจะเพิ่ม aar ของฉันลงในโปรเจค android โดยอัตโนมัติ และเพิ่มการพึ่งพาใน build.gradle
Adi

@Adi หากคุณมีการพึ่งพา Maven อยู่แล้วอย่าใส่ aar ที่เกี่ยวข้องลงในlibsโฟลเดอร์
mixel

ขอบคุณสำหรับการตอบสนองที่ฉันกล่าวถึงการเพิ่ม aar to libs เป็นไปโดยอัตโนมัติโดยปลั๊กอินสตูดิโอ Android ที่กำลังพัฒนาดังนั้นฉันต้องการทราบว่าการพึ่งพาที่ปลั๊กอินเพิ่มไปยังไฟล์ build.gradle นั้นได้เพิ่มไปก่อนหน้านี้แล้ว
Adi

ฉันไม่มีคำตอบในตอนนี้ ฉันคิดว่าการสร้างคำถามแยกต่างหากจะดีกว่า
mixel

15

น่าเสียดายที่ไม่มีวิธีการแก้ปัญหาที่นี่สำหรับฉัน (ฉันได้รับการอ้างอิงที่ยังไม่ได้แก้ไข) สิ่งที่ใช้งานได้ในที่สุดและเป็นวิธีที่ง่ายที่สุด IMHO คือ: เน้นชื่อโครงการจาก Android Studio จากนั้นตามด้วยไฟล์ -> โมดูลใหม่ -> นำเข้า JAR หรือ AAR แพ็คเกจ เครดิตไปที่โซลูชันในโพสต์นี้


1
ควรสังเกตว่า Android Studio นั้นคลุมเครือในตัวช่วยสร้างการนำเข้า เมื่อพวกเขาระบุ "ชื่อไฟล์" ในขั้นตอนใดขั้นตอนหนึ่งสิ่งที่พวกเขากำลังขอคือเส้นทางของไฟล์ ... หวังว่าข้อความนี้จะช่วยผู้อื่นให้ปวดหัว
Tukajo

13

มี 2 ​​วิธี:

วิธีแรก

  1. เปิด Android Studio แล้วไปที่Create New Moduleหน้าต่างFile -> New -> New Module

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

  1. เลือกImport .JAR/.AAR PackageรายการและคลิกNextปุ่ม

  2. เพิ่มการอ้างอิงในbuild.gradleไฟล์ที่เป็นของappโมดูลของคุณ

    dependencies {
        ...
        implementation project(path: ':your aar lib name')
    }

นั่นคือทั้งหมดที่

วิธีที่สอง

  1. สร้างโฟลเดอร์ในไดเรกทอรีเช่นlibsaars

  2. ใส่ aar lib ของคุณลงในโฟลเดอร์ aars

  3. เพิ่มข้อมูลโค้ด

repositories {
    flatDir {
        dirs 'libs/aars'
    }
}

ลงในbuild.gradleไฟล์ของคุณเป็นของโมดูลแอพ

  1. เพิ่มการอ้างอิงในbuild.gradleไฟล์ที่เป็นของappโมดูลของคุณ
dependencies {
    ...
    implementation (name:'your aar lib name', ext:'aar')
}

นั่นคือทั้งหมดที่

หากคุณสามารถอ่านภาษาจีนคุณสามารถตรวจสอบบล็อก什么是 AAR 文件以及如何在 Android 开发中使用


คำตอบนี้มีประโยชน์จริง ๆ สำหรับฉัน
45717

เมื่อติดตามวิธีแรกชั้นเรียนภายในไฟล์ aar ไม่ถูกตรวจพบในโครงการหลักเราจำเป็นต้องเพิ่มการตั้งค่าเพิ่มเติมหรือไม่
ราน

โปรดอัปเดตหรือลบคำตอบแรกที่โพสต์ไว้แล้วและ "คอมไพล์" ครั้งที่สองถูกคัดค้าน
David

12

ด้วย Android Studio 3.4 และ Gradle 5 คุณสามารถทำได้เช่นนี้

dependencies {
    implementation files('libs/actionbarsherlock.aar')
}

1
นี่คือคำตอบที่ดีที่สุด การพึ่งพานั้นชัดเจนและง่ายมาก
Nikmoon

1
เห็นด้วยกับเรื่องนี้เป็นคำตอบที่ดีที่สุด ใช้งานได้ทันทีเหมาะสำหรับการเพิ่ม. aar dependencies ไปยัง React Native library
Josh Baker

1
นี้โยนข้อผิดพลาดที่เริ่มต้นด้วยปลั๊กอิน gradle 4: stackoverflow.com/questions/60878599/...
เดวิด

@ David ขอบคุณสำหรับรายงานฉันจะพยายามทดสอบโดยเร็ว
m0skit0

10

อัพเดท ANDROID STUDIO 3.4

  1. ไปที่ไฟล์ -> โครงสร้างโครงการ

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

  1. โมดูลและคลิกที่+

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

  1. เลือกนำเข้า. aar แพ็คเกจ

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

  1. ค้นหาเส้นทาง. aar

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

  1. เสร็จสิ้นและนำไปใช้จากนั้นตรวจสอบว่ามีการเพิ่มแพ็คเกจหรือไม่

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

  1. ตอนนี้ในโมดูลแอพคลิกที่+และโมดูลการพึ่งพา

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

  1. ตรวจสอบแพ็กเกจไลบรารีและตกลง

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

  1. ตรวจสอบการพึ่งพาเพิ่ม

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

  1. และโครงสร้างโครงการเช่นนี้

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


1
นี่คือคำตอบที่ 17 ที่ฉันอ่านว่าในที่สุดก็เพิ่มการพึ่งพา .. eeh
Taras Matsyk

6

ฉันก็มีปัญหานี้เช่นกัน รายงานปัญหานี้: https://code.google.com/p/android/issues/detail?id=55863ดูเหมือนว่าจะแนะนำว่าไม่สนับสนุนการอ้างอิงไฟล์. AAR โดยตรง

บางทีทางเลือกสำหรับตอนนี้คือการกำหนดไลบรารี actionbarsherlock เป็นไลบรารี Gradle ภายใต้ไดเรกทอรีหลักของโครงการและการอ้างอิงของคุณ

ไวยากรณ์ถูกกำหนดไว้ที่นี่http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library


ขอบคุณสำหรับการอ้างอิงถึงปัญหา ใช่ฉันรู้วิธีที่จะทำให้งานนี้ใช้ Gradle Android Library แต่ตัวเลือกนี้ไม่เหมาะสำหรับโครงการที่ฉันกำลังทำงานอยู่ แต่ขอบคุณ!
Miguel Lavigne

3

ฉันพบวิธีแก้ปัญหานี้ในตัวติดตามปัญหา Android: https://code.google.com/p/android/issues/detail?id=55863#c21

เคล็ดลับ (ไม่ใช่การแก้ไข) คือการแยกไฟล์. aar ของคุณลงในโครงการย่อยและเพิ่ม libs ของคุณเป็นส่วน:

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))

ข้อมูลเพิ่มเติม: การ จัดการ - การพึ่งพา - สกรรมกริยา - สำหรับ - วัตถุในท้องถิ่น - ขวดและ - aar


ถูกต้องและนี่คือตัวอย่าง: ในgithub.com/textileio/notes/commit/… , compile project(':mobile')ใน android / app / build.gradle configurations.maybeCreate("default")ใน Android / มือถือ / build.gradle include ':mobile'ใน android / settings.gradle
Li Zheng

3

ในกรณีของฉันฉันมีการอ้างอิงบางอย่างในห้องสมุดของฉันและเมื่อฉันสร้างaarมันฉันล้มเหลวเนื่องจากการไม่ได้รับการอ้างอิงดังนั้นวิธีการแก้ปัญหาของฉันคือการเพิ่มการพึ่งพาทั้งหมดจาก lib ของฉันด้วยarrไฟล์

ดังนั้นระดับโปรเจคของฉันbuild.gradleจะเป็นดังนี้:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
        //add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
        flatDir {
            dirs 'libs'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(modile app) ดังนั้น:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.sampleapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //your project depencies
    ...
    //add lib via aar-depency
    compile(name: 'aarLibFileNameHere', ext: 'aar')
    //add all its internal depencies, as arr don't have it
    ...
}

และห้องสมุดbuild.gradle:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //here goes library projects dependencies, which you must include
    //in yours build.gradle(modile app) too
    ...
}

3

ฉันลองวิธีแก้ปัญหาทั้งหมดที่นี่ แต่ไม่มีใครทำงานแล้วฉันรู้ว่าฉันทำผิดฉันใส่.aarโฟลเดอร์ผิดเพราะคุณเห็นด้านล่างฉันคิดว่าฉันควรใส่ในโฟลเดอร์รากดังนั้นฉันจึงสร้างlibsโฟลเดอร์ที่นั่น (1 ในภาพ ) แต่ภายในโฟลเดอร์แอพมีอยู่แล้วlibsคุณควรใส่ไว้ในลำดับที่สองlibsหวังว่านี่จะช่วยผู้ที่มีปัญหาเช่นเดียวกับฉัน:

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


3

มีการกำหนดวิธีมาตรฐานในการนำเข้าไฟล์ AAR ในแอปพลิเคชัน https://developer.android.com/studio/projects/android-library.html#AddDependency

คลิกไฟล์> ใหม่> โมดูลใหม่ คลิกอิมพอร์ต. JAR / .AAR Package จากนั้นคลิกถัดไป ป้อนตำแหน่งของไฟล์ AAR หรือ JAR ที่คอมไพล์แล้วคลิกเสร็จสิ้น

โปรดอ้างอิงลิงค์ด้านบนสำหรับขั้นตอนถัดไป


2

เพียงเพื่อลดความซับซ้อนของคำตอบ

หากไฟล์. aar อยู่ภายในเครื่องจากนั้นให้รวม
compile project(':project_directory')พึ่งพา build.gradle ของโครงการของคุณ

หากไฟล์. aar มีอยู่ที่รีโมตให้รวมการ compile 'com.*********.sdk:project_directory:0.0.1@aar'พึ่งพา build.gradle ของโครงการของคุณ


0

ในกรณีของฉันทำงานเมื่อฉันเพิ่ม "โครงการ" เพื่อรวบรวม:

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}


dependencies {
   compile project('com.x.x:x:1.0.0')
}

0

คุณสามารถทำสิ่งนี้:

  1. วางไลบรารีโลคัลของคุณ (พร้อมส่วนขยาย: .jar, .aar, ... ) ลงในโฟลเดอร์ 'libs' (หรืออื่น ๆ หากคุณต้องการ)

  2. ใน build.gradle (ระดับแอป) เพิ่มบรรทัดนี้เป็นการอ้างอิง

    การใช้งาน fileTree (รวมถึง: ['* .jar', '* .aar'], dir: 'libs')

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