วิธีนำเข้าโครงการ Android เป็นไลบรารีและไม่รวบรวมเป็น apk (Android Studio 1.0)


120

ฉันพยายามนำเข้าโปรเจ็กต์ (projLib) เป็นการอ้างอิงสำหรับโปรเจ็กต์อื่น (projAPK)

projAPK gradle มีสิ่งนี้:

dependencies {
    compile project(':libs:NewsAPI')
    compile project(':projLib')
}

แต่เมื่อฉันซิงค์ gradle มันทำให้เกิดข้อผิดพลาดนี้:

ข้อผิดพลาด: Dependency Android_2015: projLib: ไม่ได้ระบุในโปรเจ็กต์ projAPK แก้ไขเป็นไฟล์เก็บถาวร APK ซึ่งไม่ได้รับการสนับสนุนให้เป็นการพึ่งพาการคอมไพล์ ไฟล์: /Users/myname/Documents/Development/Android_2015/libs/projAPK/build/outputs/apk/projLib-release-unsigned.apk

ดังนั้นฉันเดาว่ามีสองวิธีแก้ปัญหานี้:

  1. ทำให้ gradle คิดว่า projLib เป็นไลบรารีที่ไม่ควรรวบรวมเป็น apk
  2. ทำให้ gradle ไม่รวบรวม projLib อย่างชัดเจน

ปัญหาคือฉันไม่พบวิธีการใด ๆ จะดีมากถ้าพวกคุณช่วยได้ :)

คำตอบ:


330

ในprojLibไฟล์ build.gradle ของคุณจะเห็นคำสั่งเช่นนี้:

apply plugin: 'com.android.application'

ซึ่งบอกให้ Gradle สร้างเป็นแอปพลิเคชันสร้าง APK หากคุณเปลี่ยนเป็นสิ่งนี้:

apply plugin: 'com.android.library'

มันจะสร้างเป็นไลบรารีสร้าง AAR และควรใช้งานได้

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

ไลบรารีไม่ได้รับอนุญาตให้ตั้งค่าapplicationIdดังนั้นหากคุณเห็นข้อความแสดงข้อผิดพลาดของเอฟเฟกต์นั้นให้ลบออกจากสคริปต์บิลด์ของไลบรารี


ขอบคุณครับงานนี้ มีการอ่าน / เอกสารใดที่คุณสามารถแนะนำฉันเกี่ยวกับปลั๊กอินเหล่านี้ได้บ้าง
Vic Zhou

13
ฉันลองแล้วและได้รับข้อผิดพลาดใหม่: Error:Library projects cannot set applicationId. applicationId is set to 'com.bulletnoid.android.widget.StaggeredGridViewDemo' in default config.StaggeredGridViewDemo เป็นแพ็คเกจในไลบรารีที่ฉันพยายามนำเข้าเป็นโมดูล
Azurespot

13
ฉันเพิ่งลบบรรทัดรหัสแอปพลิเคชันออกจาก defaultConfig {} และใช้งานได้
ericharlow

นอกจากนี้คุณจะต้องเพิ่ม 'tools: replace = "android: icon" บน <application ... > ... เพื่อแทนที่ไอคอนหลัก
Ric17101

24

ในไฟล์ gradle โมดูล -

แทนที่ apply plugin: 'com.android.application'ด้วยapply plugin: 'com.android.library'

จากนั้นนำออก applicationId "xxx.xxx.xxxx"

ทำความสะอาดและสร้าง


ทั้งหมดกำลังทำอยู่ในไฟล์โมดูล gradle
Vlad

1

เพียงแค่เพิ่มบรรทัดเหล่านี้ลงในgradleไฟล์ไลบรารีและลบส่วนอื่น ๆ

apply plugin: 'com.android.library'

android {
   compileSdkVersion 23
   buildToolsVersion '23.0.2'
}

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.squareup.picasso:picasso:2.4.0'
   compile 'com.google.code.gson:gson:2.2.4'
   compile 'com.android.support:appcompat-v7:23.1.1'
   compile 'com.android.support:gridlayout-v7:23.1.1'
  ,...
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.