অ্যান্ড্রয়েড স্টুডিও বিল্ড.gradle এ বাহ্যিক প্রকল্প যুক্ত করে


139

আমার নীচের সেটআপ সহ একটি নমুনা প্রকল্প রয়েছে:

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

যেখানে ' টেস্ট প্রকল্প ' নির্ভর করে ' টেস্ট লিবি'র উপর, এবং শেষটি নির্ভর করে' খাঁটি জাভা লিব ' প্রকল্পটি সংকলন করে এবং এই সেটআপটি চালু করা ঠিক কাজ করে।

আমি এখন আমার পূর্ববর্তী কর্মক্ষেত্রটি আমদানি করার কথা ভাবছি এবং অ্যান্ড্রয়েড স্টুডিওতে কাজ করার জন্য, সমস্যাটি হ'ল প্রকল্পের সেটআপটি আলাদা এবং আমি এটিকে এভাবেই রাখতে চাই।

উদাহরণস্বরূপ যদি পূর্ববর্তী উদাহরণটি ব্যবহার করতে হয়:

/root
  + Android Test Lib
  + Android Test Project

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

আমি অনেকগুলি কনফিগারেশন চেষ্টা করেছি, কিন্তু প্যারেন্ট ফোল্ডারের (' রুট ) এর আওতার বাইরে কোনও প্রকল্পের রেফারেন্স দেওয়ার কোনও উপায় আমি পাইনি উদাহরণস্বরূপ ') ।

অনেক প্ল্যাটফর্ম / মডিউলগুলিতে আপনি ফোল্ডারে উপরে যেতে '..' ব্যবহার করতে পারেন তবে এটি আমার পক্ষে কার্যকর হয়নি, সম্ভবত আমি এটি ভুল ব্যবহার করেছি।

গ্রেডলের সাথে কীভাবে এটি অর্জন করা যায় তা কি কেউ জানেন?

হালনাগাদ

আমি আরও জেনেরিক হওয়ার চেষ্টা করব:

/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 ব্যবহার করতে চান সেটি প্রকল্পের বি , প্রকল্পের 'এ


আপডেট: 09-03-19

আমি এটি এখনই দেখেছি এবং আপডেট করতে হবে ... প্রায় 6 বছর পরে আজ আমি বুদ্ধিমান, এবং আমি অবশ্যই বলতে পারি যে সমস্যাটি ছিল "সত্যের উত্স" ধারণাটি ভুল বোঝাবুঝি।

একটি লাইব্রেরিতে একটি রেফারেন্স থাকার সময় ধারণাটি খুব সুন্দর হয় .. এবং এটি "সত্যের উত্স" এর মতো মনে হতে পারে, সত্যই "সত্যের উত্স" প্রতিটি প্রকল্পের সেই লাইব্রেরির কোডটির কারণ হিসাবে কাজ করবে, কারণ লাইব্রেরিতে নিজেই সংস্করণ রয়েছে .. অনেকগুলি সংস্করণ "সত্যের উত্স" প্রকল্পটির সাথে সম্পর্কিত যা গ্রন্থাগারটি ব্যবহার করছে।

সঠিক উপায়টি হ'ল বেশিরভাগ বিকাশকারীরা যা পছন্দ করেন না তা ব্যবহার করা, এবং তা হ'ল গিট সাবমডিউলস এবং হ্যাঁ প্রতিটি প্রকল্পের উত্সগুলি নকল করুন কারণ প্রতিটি প্রকল্পের কোডের একটি ভিন্ন সংস্করণ ব্যবহার করার সম্ভাবনা সবচেয়ে বেশি।

আপনার সমস্ত প্রকল্পের জন্য আপনার সমস্ত লাইব্রেরির সর্বশেষতম এবং সর্বশ্রেষ্ঠ সংস্করণটি ব্যবহার করার লক্ষ্যে আপনার প্রয়োজন হবে .. যা নিজেই একটি চ্যালেঞ্জ is

লাইব্রেরি উত্সের সাহায্যে কোনও প্রকল্প বিকাশের সঠিক উপায় হ'ল এই স্কেলগুলি ... আপনার নিজস্ব লাইব্রেরি কনফিগারেশন সহ আপনি প্রতিটি শত শত প্রকল্প রাখতে পারেন।


4
আমি এই প্রশ্নের কিছুটা মনোযোগ পেতে দেখছি ... সত্যিই কঠোর চেষ্টা করার পরে, আমি আপাতত অ্যান্ড্রয়েড স্টুডিওতে ছেড়ে দিয়েছি, যেহেতু আমি যে সেটআপটি নির্মাণের চেষ্টা করছিলাম তা কেবলমাত্র অনেক বেশি, এবং আমার চূড়ান্ত প্রকল্পটি নির্মাণযোগ্য ছিল, তবে অত্যন্ত অস্থির। অ্যান্ড্রয়েড স্টুডিওর প্রতিটি লঞ্চের সাথে আমাকে আবার কিছু প্যারামিটার সেট করতে হয়েছিল, এবং ম্যানুয়ালি বিল্ডটি কাজ করার কারণ হয়েছিল। আমি হাল ছেড়ে দিতে প্রায় দুই মাস হয়ে গেছে, এবং আমি আশা করি যে জিনিসগুলি এখন আরও ভাল হয়েছে!
TacB0sS

2 পদ্ধতির এখানে কীভাবে খুব সহজেই এটি করা যায় তা ব্যাখ্যা করা হয়েছে: স্ট্যাকওভারফ্লো
প্রশ্নগুলি

উত্তর:


222

ধরে নিই যে কিছু অন্যান্য ফোল্ডার হ'ল গ্রেডেল প্রকল্প যা আপনি আপনার সেটিংসের উদাহরণস্বরূপ ফাইলটিতে নিম্নলিখিতগুলির মতো কিছু যুক্ত করতে পারেন:

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

1
কিছু অন্যফোল্ডার একটি প্রকল্প ফোল্ডারের দিকে ইঙ্গিত করে এবং এর মধ্যে মডিউল রয়েছে, যা আমি অ্যান্ড্রয়েড লিব প্রকল্পের মডিউল হিসাবে যুক্ত করতে আগ্রহী
TacB0sS

সেটিংস dir 'রুট'কে নির্দেশ করে আমাকে অন্য প্রকল্পের অন্য একটি মডিউলে একটি স্তর উচ্চতর করা দরকার।
TacB0sS

আপনি কি তার পরে সাবমডিউলগুলি যুক্ত করতে পারেন? অন্তর্ভুক্ত করুন ': সামান্যআউটফোল্ডার: প্রোজ 1'
ইথান

1
কিছু বিশদ সহ আপডেট হয়েছে। settings.gradle / প্রজেক্ট এ
ইথান

5
দুর্দান্ত উত্তর। ১.০.২. তে, আমাকে নিম্নলিখিতগুলিও করতে হবে: রাইট ক্লিক মডিউল -> মডিউল সেটিংস খুলুন -> নির্ভরতা -> + (নীচে), মডিউল নির্ভরতা নির্বাচন করুন, তালিকা থেকে আপনার গ্রন্থাগারটি নির্বাচন করুন, ঠিক আছে ক্লিক করুন :)
টি। কাউট্লাকিস

49

আপনাকে আপনার ফাইলের সেটিংস স্থাপন করতে হবে this

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

তারপরে আপনাকে নির্ভরতা গাছটিতে আপনার বিল্ড.gradle (মডিউল: অ্যাপ) যুক্ত করতে হবে , এই লাইনটি:

implementation project(':module2')

অথবা প্রকল্পের কাঠামো > অ্যাপ > নির্ভরতাগুলিতে যান , অ্যাড ক্লিক করুন , 3 মডিউল নির্ভরতা চয়ন করুন এবং আপনার মডিউলটি নির্বাচন করুন


1
আপনার যদি মূল অ্যাপ্লিকেশন থেকে গ্রন্থাগারের ক্লাসগুলি উল্লেখ করতে সমস্যা হয় তবে এটি কারণ গ্রন্থাগারটি সম্ভবত বিভিন্ন রূপে আসে। সুতরাং, শুধু একটি সঠিক ভাবে নির্ভরতা উল্লেখ করুন: compile project(path: ':library', configuration: 'variant')। এখানে, variantনিয়ে গঠিত flavorএবং buildTypeযেমন লাইব্রেরির দ্বারা সংজ্ঞায়িত build.gradleফাইল। উদাহরণস্বরূপ, আপনি যদি releaseকোনও developগন্ধে লাইব্রেরির প্রকারটি তৈরি করতে চান তবে variantতা developRelease
সেবাদাস্তন সাবন্যুক

9

Gradle 1.10 দিয়ে (কি না জানি না অন্য সংস্করণের এই জন্য কার্যকর থাকবে) এই আমি এখানে দেওয়া প্রতিক্রিয়া উপর ভিত্তি করে নিয়ে এসেছেন হয় http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

আমার একটি এপিআই লাইব্রেরি প্রকল্প, একটি সাধারণ গ্রন্থাগার প্রকল্প এবং প্রধান অ্যাপ্লিকেশন প্রকল্প রয়েছে। প্রত্যেকটি একটি একা একা উন্নয়ন প্রকল্প এবং দুটি গ্রন্থাগার একাধিক অ্যাপ্লিকেশনগুলির মধ্যে ভাগ করে নেওয়া বোঝানো হয়।

সাধারণ প্রকল্পের জন্য সেটিংসে উদাহরণ:

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'

প্রতিটি বিল্ডড্রেডল ফাইলের মধ্যে আপনি কেবল সেটিংগুলিতে যে নামটি দিয়েছিলেন সেগুলি দিয়ে তাদের রেফারেন্স করে re তৈরি করুন প্রকল্পের বিবরণী যেমন আপনি অন্য কোনও প্রকল্প নির্ভরতা চান:

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

এটি কাজ করে বলে মনে হচ্ছে। এটি এপিআই লাইব্রেরি সংজ্ঞায়িত করে একাধিক ডেক্স ফাইলের জন্য একটি ত্রুটিও ফেলেনি, আমি সন্দেহ করি কারণ এটি একই বিল্ড প্রক্রিয়াটির সমস্ত অংশ এবং গ্রেডল এটিকে পুরোপুরি আবিষ্কার করার জন্য যথেষ্ট স্মার্ট ছিল।


2
আমি এটি চেষ্টা করেই চলেছি তবে সমস্যাটি হ'ল সংশ্লিষ্ট লাইব্রেরির নির্ভরতাগুলি কখনই বোঝা হয়ে উঠবে না বলে মনে হয়। সুতরাং আমার কাছে যদি কেবল লাইব্রেরিটি খোলা থাকে তবে এটি সূক্ষ্ম মনে হয় তবে আমি যখন এটি মূল অ্যাপ্লিকেশন থেকে চেষ্টা করি তখন এটি বলে যে সমস্ত আমদানিকৃত লাইব্রেরি অনুপস্থিত।
সিজনপ্রযুক্তি

@ প্রযুক্তি প্রযুক্তি একই সমস্যা ছিল। এটি সমাধান। : এই উত্তরের জন্য আমার মন্তব্য দেখুন stackoverflow.com/a/29603354/7408927
Sevastyan Savanyuk

9

প্রকল্পে ডান ক্লিক করুন - "মডিউল সেটিংস খুলুন" নির্বাচন করুন - বাম ফলকে "মডিউলগুলি" নির্বাচন করুন - উপরের "+" চিহ্নে ক্লিক করুন - "আমদানি মডিউল" নির্বাচন করুন।

মডিউল আমদানি করার পরে। আপনার এটি আপনার বর্তমান প্রকল্পের নির্ভরতা হিসাবে যুক্ত করা দরকার।

"মডিউলগুলি" বাম ফলকে নির্বাচিত রাখুন এবং আপনার প্রকল্পে ক্লিক করুন - এখন নির্ভরতা ট্যাবে যান এবং নীচে অবস্থিত "+" প্রতীকটিতে ক্লিক করুন - তৃতীয় বিকল্প "মডিউল নির্ভরতা" চয়ন করুন এবং যদি আপনি আপনার প্রকল্পটি সঠিকভাবে আমদানি করে থাকেন তবে এটি হবে আপনার বর্তমান প্রকল্পের নির্ভরতা হিসাবে যুক্ত করা যায় এমন সমস্ত উপলব্ধ মডিউল আপনাকে দেখায়।


এটি প্রায় কাজ করে ... প্রকল্পটি নির্মাণ করা যায় না কারণ নির্ভরতা মডিউলের আউটপুট বিল্ড.gradle ফাইলটিতে যোগ করা হয় না, এটি হ'ল আমার মূল সমস্যা।
TacB0sS

আমি মনে করি গ্রেডের সাথে আপনার সমস্ত প্রকল্প একই রুট ফোল্ডারে রাখা দরকার। চেষ্টা কর. আপনি যে প্রকল্পটি আপনার বর্তমান প্রকল্প হিসাবে একই ফোল্ডারে নির্ভরতা হিসাবে যুক্ত করতে চান তা রাখুন।
বরুণড্রয়েড

এটিই কেউ করতে চায় না এটিএম ছাড়া আপনি যদি অ্যান্ড্রয়েড স্টুডিওতে কাজ করতে চান তবে জিনিসগুলি কাজ করার উপায় এটি। আর একটি বিকল্প উপায় যা আমি অনুসরণ করছি তা হ'ল, আমি সমস্ত নির্ভরতা ইন্টেলিজ সেটআপে প্রজেক্ট তৈরি করি এবং তারপরে সেই প্রকল্পটি অ্যান্ড্রয়েড স্টুডিওতে আমদানি করি, এটি করে আমি অ্যান্ড্রয়েড স্টুডিওকে গ্রেডলের চেয়ে পিঁপড়া বিল্ড সিস্টেম ব্যবহার করতে বাধ্য করছি। আশা করি এটা সাহায্য করবে. চিয়ার্স !!
বরুণড্রয়েড

1
@ ভারুন্ড্রয়েড, সমাধানটি প্রথমে ইথানের উত্তরটি ব্যবহার করে একা লাইব্রেরির জন্য একটি সূত্র আমদানি করা হয়। তারপরে আপনার উত্তরটি ব্যবহার করে মূল অ্যাপের নির্ভরতাগুলিতে মডিউল যুক্ত করুন। এটি আপনাকে লাইব্রেরি কোডটির নকল না করে একাধিক অ্যাপ্লিকেশনে একই লাইব্রেরিটি উল্লেখ করতে দেয়।
bcorso

1

আমি এই প্রশ্নটি এমনভাবে পুনরায় জিজ্ঞাসা করি যা মূল পোষ্টারদের অভিপ্রায়গুলিতে অন্তর্ভুক্ত রয়েছে যেখানে আমরা কীভাবে আমাদের মূল অ্যান্ড্রয়েড প্রকল্পের ডিরেক্টরিটির বাইরে থাকা কাস্টম অ্যান্ড্রয়েড এবং জাভা লাইব্রেরিগুলিকে উল্লেখ করব?

সেখানে আমি আমার নিজের প্রশ্নের উত্তর দিই। মূলত আমার উত্তরটি @ ইথানের (বর্তমান থ্রেডে নির্বাচিত উত্তরের লেখক) গ্রেড কোডিং অন্তর্দৃষ্টি ব্যবহার করে। তবে আমার উত্তরটি আরও কিছু গোচা নেভিগেট করে এবং ধাপে ধাপে একটি বিশদ পদক্ষেপ সরবরাহ করে।


-1

যেমন ইথান বলেছিল, আপনি যদি এটি আপনার সেটিংসে যেমন যোগ করেন তবে এটি অ্যান্ড্রয়েড স্টুডিওতে একটি বাহ্যিক প্রকল্প যুক্ত করবে (উদাহরণস্বরূপ, এটি প্যারেন্ট ফোল্ডারে রয়েছে):

project(':../ProjectB/:module1')

তারপরে, এটিকে আপনার প্রকল্পগুলির একটির নির্ভরতা হিসাবে যুক্ত করতে, কেবলমাত্র এটিকে অন্য প্রকল্পের হিসাবে এই প্রকল্পের বিল্ড.gradle এ যুক্ত করুন (আপনি এটিকে এখানে যেমন গ্রাফিকভাবে করতে পারেন ):

compile project(':../ProjectB/:module1')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.