it-swarm.asia

استوديو أندرويد يضيف مشروعًا خارجيًا إلى build.gradle

لدي مشروع نموذج ، مع الإعداد التالي:

/root
  + Pure Java Lib
  + Android Test Lib
  + Android Test Project

حيث ' اختبار المشروع ' يعتمد على ' اختبار Lib ' ، والأخير يعتمد على ' Pure Java Lib ' تجميع المشروع و إطلاق هذا الإعداد يعمل بشكل جيد.

أفكر الآن في استيراد مساحة عمل Eclipse السابقة والعمل مع Android studio ، والمشكلة هي أن إعداد المشروع مختلف ، وأود الاحتفاظ به بهذه الطريقة.

على سبيل المثال إذا كنت تريد استخدام المثال السابق:

/root
  + Android Test Lib
  + Android Test Project

/Some Other folder (another repository for example)
  + Pure Java Lib

لقد جربت العديد من التكوينات ، لكنني لم أجد طريقة للإشارة إلى مشروع خارج نطاق المجلد الأصل (' root ' في المثال المثال).

في العديد من الأنظمة الأساسية/الوحدات النمطية ، يمكنك استخدام ".." للانتقال إلى أعلى في المجلدات ، لكن هذا لم ينجح بالنسبة لي ، وربما استخدمتها بشكل خاطئ.

لا أحد يعرف كيف يمكن تحقيق ذلك مع Gradle؟

تحديث

سأحاول أن أكون أكثر عمومية:

/C:/

  /Project A
    + Module 1 - Pure Java
    + Module 2 - Android Test Lib
    + Module 3 - Android Test Project

  /Project B
    + Module 1 - Pure Java
    + Module 2 - Pure Java
    + Module 3 - Pure Java

أرغب في استخدام الوحدة 1 من المشروع B ، في المشروع A .


التحديث: 09-03-19

لقد رأيت هذا الآن ولا بد لي من التحديث ... بعد ما يقرب من 6 سنوات ، اليوم أنا أكثر حكمة ، ويمكنني بالتأكيد أن أقول إن المشكلة هي أنني سوء فهم مفهوم "مصدر الحقيقة".

في حين أن وجود مرجع واحد لمكتبة يعد مفهومًا لطيفًا .. وقد يبدو وكأنه "مصدر الحقيقة" ، فإن "مصدر الحقيقة" الحقيقي هو إصدار التعليمات البرمجية التي يستخدمها كل مشروع لتلك المكتبة ، والسبب تحتوي المكتبة في حد ذاتها على إصدارات .. العديد من الإصدارات "مصدر الحقيقة" يرتبط بالمشروع الذي يستخدم المكتبة.

ستكون الطريقة الصحيحة هي استخدام ما لا يعجب معظم المطورين ، وهو git وحدات فرعية ، ونعم تكرار المصادر في كل مشروع يسبب معظم الفرص يستخدم كل مشروع إصدار مختلف من التعليمات البرمجية.

ومع ذلك ، يجب أن تهدف جميع مشاريعك إلى استخدام أحدث وأكبر نسخة من جميع مكتباتك .. وهذا تحدٍ بحد ذاته

السبب في أن هذه هي الطريقة الصحيحة لتطوير مشروع مع مصادر مكتبة هو أن هذه المقاييس ... يمكنك الحصول على مئات من المشاريع مع كل تكوين المكتبة الخاصة به.

132
TacB0sS

على افتراض أن بعض المجلدات الأخرى هو مشروع للمحتوى ، يمكنك إضافة شيء مثل التالي إلى ملف الإعدادات الخاص بك:

include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')
216
Ethan

عليك أن تضع في ملفك settings.gradle هذه السطور:

include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')

ثم يتعين عليك إضافة builde.gradle (الوحدة النمطية: التطبيق) في التبعيات شجرة ، هذا السطر:

compile project(':module2')

أو انتقل إلى هيكل المشروع > التطبيق > التبعيات ، انقر فوق أضف ، اختر 3 تبعيات الوحدة النمطية و حدد الوحدة النمطية الخاصة بك

43
Dario Bruzzese

باستخدام Gradle 1.10 (لا أعرف الإصدارات الأخرى التي سيكون هذا صالحًا لها) هذا ما توصلت إليه استنادًا إلى استجابة مقدمة هنا http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

لديّ مشروع مكتبة api ومشروع مكتبة مشترك ومشروع التطبيق الرئيسي. كل منها عبارة عن مشروع تطوير مستقل والمقصود من المكتبتين أن تكون مشتركة بين تطبيقات متعددة.

في settings.gradle للمشروع المشترك:

def apiLibDir = file('../Android-api/Android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'Android-api-lib', apiLibDir)
include ':Android-api-lib'

ثم في إعدادات مشروع التطبيق الرئيسي.

def apiLibDir = file('../Android-libs/Android-api/Android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'Android-api-lib', apiLibDir)
include ':Android-api-lib'

def commonLibDir = file('../Android-libs/Android-common/Android-common-lib')
settings.createProjectDescriptor(rootProjectDescriptor, 'Android-common-lib', commonLibDir)
include ':Android-common-lib'

في كل ملف من ملفات build.gradle ، يمكنك الرجوع إليها فقط بالاسم الذي أعطيته لها في settings.createProjectDescriptor كما لو كنت تعتمد على أي مشروع آخر تابع:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':Android-api-lib')
    compile project(':Android-common-lib')
}

هذا يبدو للعمل. لم يلقي خطأً في ملفات DEX المتعددة التي تحدد مكتبة api ، وأظن أنها كانت جزءًا من عملية الإنشاء نفسها وأن Gradle كان ذكيًا بدرجة كافية لإثبات ذلك.

9
alphonzo79

انقر بزر الماوس الأيمن على المشروع - حدد "فتح إعدادات الوحدة النمطية" - حدد "الوحدات النمطية" في الجزء الأيمن - انقر فوق "+" الرمز في الأعلى - اختر "استيراد وحدة نمطية".

بعد استيراد الوحدة. تحتاج إلى إضافته كتبعية لمشروعك الحالي.

احتفظ بـ "الوحدات النمطية" المحددة في الجزء الأيمن وانقر فوق مشروعك - اذهب الآن في علامة تبويب التبعيات وانقر على رمز "+" الموجود في الأسفل - اختر الخيار الثالث "تبعيات الوحدة النمطية" وإذا كنت قد قمت باستيراد مشروعك بشكل صحيح ، فسوف تبين لك كل وحدة المتاحة التي يمكن أن تضاف باعتبارها التبعية لمشروعك الحالي.

9
Varundroid

أعيد طرح هذا السؤال بطريقة تستلزم نوايا الملصقات الأصلية في كيف يمكننا الرجوع إلى مكتبات Android و Java المخصصة التي تعيش خارج دليل مشروع Android الرئيسي؟

هناك أجب على سؤالي الخاص. في جوهر إجابتي يستخدم @ إيثان (مؤلف الإجابة المختارة في سلسلة الرسائل الحالية) نظرة ثاقبة الترميز. لكن جوابي يتنقل أيضًا في بعض المسلاسلات ويوفر مثالًا تفصيليًا خطوة بخطوة.

1
John Bentley