অ্যান্ড্রয়েড স্টুডিওতে জারে লাইব্রেরি রফতানি করবেন কীভাবে?


84

আমি কয়েকটি গ্রন্থাগার উত্স ডাউনলোড করেছি এবং এটি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে জার ফাইল হিসাবে রফতানি করতে চাই। অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে জার ফাইলটিতে রফতানি করার কোনও উপায় আছে?

সম্পাদনা করুন:

জার হিসাবে আমি যে লাইব্রেরিটি রফতানি করতে চাই তা একটি অ্যান্ড্রয়েড লাইব্রেরি। একে "স্ট্যান্ডআউট" বলা হয় এবং গিটহাব থেকে ডাউনলোড করা যায়। https://github.com/pingpongboss/StandOut


দয়া করে গ্রন্থাগার আরও বিশদের আপনাকে রপ্তানি চান দিতে
gamag

আমি অ্যান্ড্রয়েড গ্রন্থাগারের বিবরণ দিয়ে আমার প্রশ্ন সম্পাদনা করেছি।
সেজে পুরিপ্রে

উত্তর:


85

জার ফাইল হিসাবে অ্যান্ড্রয়েড লাইব্রেরি রফতানি করা সম্ভব নয়। তবে এটি aarফাইল হিসাবে রফতানি করা সম্ভব । Aarফাইলগুলি অ্যান্ড্রয়েড লাইব্রেরির জন্য নতুন বাইনারি ফর্ম্যাট। গুগল আই / ও, নিউ বিল্ড সিস্টেমের ভিডিওটিতে তাদের সম্পর্কে তথ্য রয়েছে ।

প্রথমে, অ্যান্ড্রয়েড স্টুডিওতে বা gradle buildআপনার লাইব্রেরির মূল ডিরেক্টরি থেকে কমান্ড লাইন থেকে পাঠাগারটি তৈরি করুন।

এর ফলে <yourlibroot>/libs/build/yourlib.aarফাইল হবে।

এই আর ফাইলটি আপনার লাইব্রেরির বাইনারি উপস্থাপনা এবং নির্ভরতা প্রকল্প হিসাবে লাইব্রেরির পরিবর্তে আপনার প্রকল্পে যুক্ত করা যেতে পারে।

আআর ফাইলকে নির্ভরতা হিসাবে যুক্ত করতে আপনাকে এটিকে মভেন সেন্ট্রাল বা আপনার স্থানীয় মাভেন ভান্ডারগুলিতে প্রকাশ করতে হবে এবং তারপরে আপনার প্রকল্পের ফাইলটিতে আয়ার ফাইলটি উল্লেখ করতে gradle.buildহবে।

তবে এই পদক্ষেপটি কিছুটা বিশৃঙ্খল। আমি এখানে কীভাবে এটি করতে পারি তার একটি ভাল ব্যাখ্যা পেয়েছি:

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


4
অন্যান্য অ্যান্ড্রয়েড-লাইব্রেরির উপর নির্ভর করে অ্যান্ড্রয়েড-গ্রন্থাগার থাকা জিনিসগুলি ভেঙে দিতে পারে।
Loïc Faure-Lacroix

রেজ ফোল্ডারটি কি আরআর ফাইলের অন্তর্ভুক্ত হবে?
বাগসফ্লায়ার

নীচে @ ওয়ালমার্ট_হোবোর উত্তর দেখুন, এটি সম্ভব এবং আমি নিশ্চিত করতে পারি যে রফতানি করা জারটি একটি গ্রহন অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্রকল্পে দুর্দান্ত কাজ করে।
পেলেট

4
আমি এই লিঙ্কটিতে আমার আআর ফাইল অন্তর্ভুক্ত পেয়েছি: লাইব \ বিল্ড \ আউটপুটস \ আর
সাইমন


44

.jarএই সমাধান থেকে পদ্ধতির ব্যবহার করে আমি সংকলিত ফাইলটিতে একটি লাইব্রেরি উত্স কোড তৈরি করতে সক্ষম হয়েছি : https://stackoverflow.com/a/19037807/1002054

এখানে আমি যা করেছি তার ব্রেকডাউন করা হল:

1. চেকআউট লাইব্রেরির সংগ্রহশালা

ক্ষেত্রে এটি একটি ভলির গ্রন্থাগার ছিল

২. অ্যান্ড্রয়েড স্টুডিওতে লাইব্রেরি আমদানি করুন।

আমি অ্যান্ড্রয়েড স্টুডিও 0.3.7 ব্যবহার করেছি। এই পদক্ষেপের সময় আমি কিছু সমস্যার মুখোমুখি হয়েছি, gradleভল্লি লাইব্রেরি উত্স কোড আমদানি করার আগে আমাকে নতুন অ্যান্ড্রয়েড প্রকল্প থেকে ফোল্ডারটি অনুলিপি করতে হয়েছিল, আপনি ব্যবহারযোগ্য উত্স কোডের উপর নির্ভর করে এটি পৃথক হতে পারে।

৩. আপনার build.gradleফাইলটি পরিবর্তন করুন

// If your module is a library project, this is needed
//to properly recognize 'android-library' plugin
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.3'
    }
}

apply plugin: 'android-library'

android {
    compileSdkVersion 17
    buildToolsVersion = 17

    sourceSets {
        main  {
            // Here is the path to your source code
            java {
                srcDir 'src'
            }
        }
    }
}

// This is the actual solution, as in https://stackoverflow.com/a/19037807/1002054
task clearJar(type: Delete) {
    delete 'build/libs/myCompiledLibrary.jar'
}

task makeJar(type: Copy) {
    from('build/bundles/release/')
    into('build/libs/')
    include('classes.jar')
    rename ('classes.jar', 'myCompiledLibrary.jar')
}

makeJar.dependsOn(clearJar, build)

4. gradlew makeJarআপনার প্রকল্পের মূল থেকে কমান্ড চালান ।

আমি আমার ক্ষেত্রে আমি কপি করতে হয়েছে gradlew.batএবং gradleআমার লাইব্রেরিতে প্রকল্পের রুট মধ্যে নতুন অ্যান্ড্রয়েড প্রকল্প থেকে ফাইল। তুমি তোমার কম্পাইল গ্রন্থাগার ফাইল খুঁজে উচিত myCompiledLibrary.jarমধ্যে build\libsডিরেক্টরি।

আমি আশা করি কেউ এটি দরকারী খুঁজে পেয়েছে।

সম্পাদনা করুন:

গুহা

একাধিক মডিউল সহ একটি প্রকল্প সংকলন করার সময় আপনি নকল পাঠাগার ব্যতিক্রমের মুখোমুখি হবেন, যেখানে একাধিক মডিউল (অ্যাপ্লিকেশন মডিউল সহ) একই jarফাইলের উপর নির্ভর করে (যেমন মডিউলগুলির নিজস্ব লাইব্রেরি ডিরেক্টরি রয়েছে, যা build.gradleপ্রদত্ত মডিউলে রেফারেন্সযুক্ত ) ।

আপনি যদি একের পর এক মডিউলে একক গ্রন্থাগার ব্যবহার করতে চান তবে আমি এই পদ্ধতির ব্যবহারের পরামর্শ দেব: অ্যান্ড্রয়েড গ্রেডল বিল্ড এবং সহায়তা লাইব্রেরি


আমি খুঁজে পেয়েছি যে জারের অভ্যন্তরে থাকা রেজিস অন্তর্ভুক্ত করার কোনও উপায় নেই। এটা কি সম্ভব?
বাগসফ্লায়ার

7
অ্যান্ড্রয়েড স্টুডিওর সাম্প্রতিক সংস্করণগুলিতে একটি পরিবর্তন দরকার: লাইনটি পড়তে হবে `থেকে ('বিল্ড / ইন্টারমিডিয়েটস / বান্ডিল / রিলিজ /')
গ্রেগ এনিস

@ গ্রেগেনিস হ্যাঁ, তবে আমার ক্ষেত্রে এটি আমার মুবুলের নাম সহ একটি জার তৈরি করছে এবং আসল জারটি সেই জারের ভিতরেই রয়েছে। আমি মডিউল_নাম.জারের মতো আমার মডিউলটির সাথে তৈরি জারটি বের করেছি।
pyus13

6
@ ব্যাগসফ্লায়ার, আপনি যদি resফোল্ডার চান তবে একটি এআর ফাইল হ'ল - resফোল্ডার সমর্থন সহ একটি জেআর ফাইল ।
মার্টিন কোনেকেনি

এই জার জেনারেট করার জন্য কীভাবে প্রগুয়ার্ড প্রয়োগ করবেন?
অমৃত বিদ্রি

37

অ্যান্ড্রয়েড স্টুডিও ভি 1.0 থেকে জার ফাইলটি নীচের প্রকল্পের লিঙ্কের মধ্যে উপলব্ধ:

ডিবাগ ভার: "আপনার_এপ" \ বিল্ড \ ইন্টারমিডিয়েটস \ বান্ডেলস \ ডিবাগ \ শ্রেণি.জার

প্রকাশ ভেরি: "আপনার_এপ" \ বিল্ড \ ইন্টারমিডিয়েটস \ বান্ডিল \ রিলিজ \ ক্লাস.জার

জেআর ফাইলটি বিল্ড পদ্ধতিতে তৈরি করা হয়েছে, অ্যান্ড্রয়েড স্টুডিও জিইউআইতে এটি বিল্ড-> মেক প্রকল্প থেকে এবং সিএমডি লাইন থেকে এটি "গ্রেডলু বিল্ড"।


4
আপনি এই উত্তরের জন্য আমার সমস্ত
আন্তঃগ্রহীত পাবেন

4
এটি পাওয়া গেছে, বিল্ড ভেরিয়েন্টগুলিতে, আমাদের বিল্ড ভেরিয়েন্টকে 'মুক্তি' হিসাবে বেছে নিতে হবে। তবে এখন ক্লাস.জার রিলিজ ফোল্ডারে উপস্থিত নেই!
অপরাজিত সায়রাম

4
@ অপরাজিতসায়রাম কীভাবে আপনি আপনার জেআর, কমান্ড লাইন বা গুই তৈরি করেছিলেন?
আভি লেভিন

4
@ অপারাজিথসায়রাম, আমি জিইউআইতে কিছু পেয়েছি তবে এটি কেবলমাত্র APK ফাইল তৈরির জন্য প্রাসঙ্গিক। প্রাসঙ্গিক বিল্ড বৈকল্পিক নির্বাচনের পরে সবুজ "প্লে" আইকন টিপুন। এটি একটি পটভূমি সমাবেশ গ্রেড কমান্ড চালাবে যা ফাইলটি তৈরি করবে। সিএমডি-তে একটি জেআর ফাইলের জন্য আপনাকে গ্রেডলু এসেম্বলডিবগ বা রিলিজ বা আপনার যে কোনও স্বাদ রয়েছে তা চালাতে হবে। তারপরে জারটি নিম্নলিখিত অবস্থানে পাওয়া যাবে: আপনার_এপ "\ বিল্ড \ ইন্টারমিডিয়েটস \ বান্ডিলগুলি \" ফলভোর "\ ক্লাস.জার আপনি আপনার সমস্ত সমাবেশ কমান্ড" গ্রেডলু টাস্ক "ব্যবহার করে দেখতে পাবেন
আভি লেভিন

4
আমি আরও এক বছর আগে আরও উত্তর উত্সাহিত করেছি। যে ব্যবসা স্ক্রু। এই কেক! ধন্যবাদ !!
কেভিন

31

বিল্ড.gradle মধ্যে নিম্নলিখিত অন্তর্ভুক্ত করুন:

android.libraryVariants.all { variant ->
    task("generate${variant.name}Javadoc", type: Javadoc) {
        description "Generates Javadoc for $variant.name."
        source = variant.javaCompile.source
        ext.androidJar = "${android.plugin.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
        classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar)
    }

    task("javadoc${variant.name}", type: Jar) {
        classifier = "javadoc"
        description "Bundles Javadoc into a JAR file for $variant.name."
        from tasks["generate${variant.name}Javadoc"]

    }

    task("jar${variant.name}", type: Jar) {
        description "Bundles compiled .class files into a JAR file for $variant.name."
        dependsOn variant.javaCompile
        from variant.javaCompile.destinationDir
        exclude '**/R.class', '**/R$*.class', '**/R.html', '**/R.*.html'
    }
}

তারপরে আপনি এর সাথে গ্রেড কার্যকর করতে পারেন: ./gradlew clean javadocRelease jarReleaseএটি আপনাকে আপনার জার এবং build/libs/ফোল্ডারে জাভাডোক জার তৈরি করবে ।

সম্পাদনা করুন: অ্যান্ড্রয়েড গ্রেডেল সরঞ্জামের সাথে 1.10। + অ্যান্ড্রয়েড এসডিকে দির পাওয়া আগের চেয়ে আলাদা। আপনাকে নিম্নলিখিতগুলি পরিবর্তন করতে হবে (ধন্যবাদ বিশাল!):

android.sdkDirectory 

পরিবর্তে

android.plugin.sdkDirectory

দুর্দান্ত উত্তর, এটি আমার পক্ষে নিখুঁতভাবে কাজ করেছে। জারডিবগ টাস্কটি চালানোর জন্য অ্যান্ড্রয়েড স্টুডিওতে গ্রেড টার্গেট যুক্ত করতে পারেন যা ব্যবহারযোগ্য জার তৈরি করবে (আমি এটি একটি গ্রহিত প্রকল্পে পরীক্ষা করেছি এবং এটিও সূক্ষ্মভাবে কাজ করে)।
পেলেট

8
"নতুন" অ্যান্ড্রয়েড বিল্ড সিস্টেম কেন এটিকে কুৎসিত করে তোলে :(।
মার্টিন কনেকেনি

এখনও পর্যন্ত এটি কাজ করেছে যে একমাত্র উত্তর। আপনাকে অনেক ধন্যবাদ @ ওয়ালমার্ট_হোবো
ড্রউ

একটি JAR ফাইল উত্পন্ন করার দুর্দান্ত সমাধান! সম্পদগুলিও অন্তর্ভুক্ত করা সম্ভব?
গাতান

12

আমি এই টিউটোরিয়ালটি ব্যবহার করে অ্যান্ড্রয়েড স্টুডিওতে একটি জার ফাইল রফতানি করতে সক্ষম হয়েছি: https://www.youtube.com/watch?v=1i4I-Nph-Cw "অ্যান্ড্রয়েড স্টুডিও থেকে জার রফতানি কীভাবে"

অ্যান্ড্রয়েড স্টুডিওতে জেআর রফতানির জন্য সমস্ত পদক্ষেপ অন্তর্ভুক্ত করার জন্য আমি আমার উত্তর আপডেট করেছি:

1) অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্রকল্প তৈরি করুন, অ্যাপ্লিকেশন-> build.gradle এ যান

2) এই ফাইলে নিম্নলিখিত পরিবর্তন করুন:

  • সংশোধন 'com.android.application': প্লাগইন প্রযোজ্য করার প্লাগ ইন প্রয়োগ: 'com.android.library'

  • নিম্নলিখিতগুলি সরান: অ্যাপ্লিকেশনআইডি, সংস্করণকোড এবং সংস্করণ নাম

  • নিম্নলিখিত কোড যুক্ত করুন:

// Task to delete old jar
task deleteOldJar(type: Delete){
   delete 'release/AndroidPlugin2.jar'
}
// task to export contents as jar
task exportJar(type: Copy) {
    from ('build/intermediates/bundles/release/')
    into ('release/')
    include ('classes.jar')
    rename('classes.jar', 'AndroidPlugin2.jar')
}
exportJar.dependsOn(deleteOldJar, build)

3) এই ফাইলটিতে এখন সিঙ্ক ক্লিক করতে ভুলবেন না (উপরে ডান বা সিঙ্ক বোতামটি ব্যবহার করুন)।

4) গ্রেডল ট্যাবে ক্লিক করুন (সাধারণত মাঝখানে ডানদিকে) এবং এক্সপোর্টজারে ডাউন স্ক্রোল করুন

৫) একবার আপনি রান উইন্ডোতে বিল্ড সফল বার্তাটি দেখতে পেয়ে , সাধারণ ফাইল এক্সপ্লোরার ব্যবহার করে পাথ ব্যবহার করে রফতানি করা জারটিতে যান: সি: \ ব্যবহারকারীদের নাম \ অ্যান্ড্রয়েডস্টুডিওপ্রজেক্টস \ প্রজেক্টনাম \ অ্যাপ্লিকেশন \ রিলিজ আপনি এই ডিরেক্টরিতে আপনার জার ফাইলটি দেখতে পাবেন।

শুভকামনা :)


4
দ্বিতীয় ধাপটি সমালোচনামূলক। আর কেউই এর উল্লেখ করে না। আপনাকে ধন্যবাদ, এটি আমার জন্য কাজ করেছে!
পুকি

9

এখানে আরও কয়েকটি, কয়েকটি বর্ধনের সাথে সামান্য আলাদা উত্তর।

এই কোডটি .aar এর ঠিক বাইরে চলে আসে jar ব্যক্তিগতভাবে, এটি আমাকে কিছুটা বেশি আত্মবিশ্বাস দেয় যে বিটগুলি .jar মাধ্যমে প্রেরণ করা হচ্ছে একইভাবে একই .aar এর মাধ্যমে প্রেরণ করা হয়। এর অর্থ হ'ল আপনি যদি প্রোগার্ড ব্যবহার করেন তবে আউটপুট জারটি পছন্দসইভাবে নষ্ট হয়ে যাবে।

আমি একটি সুপার "মেকজার" টাস্কও যুক্ত করেছি, যা সমস্ত বিল্ড ভেরিয়েন্টের জন্য জার তৈরি করে।

task(makeJar) << {
    // Empty. We'll add dependencies for this task below
}

// Generate jar creation tasks for all build variants
android.libraryVariants.all { variant ->
    String taskName = "makeJar${variant.name.capitalize()}"

    // Create a jar by extracting it from the assembled .aar
    // This ensures that products distributed via .aar and .jar exactly the same bits
    task (taskName, type: Copy) {
        String archiveName = "${project.name}-${variant.name}"
        String outputDir = "${buildDir.getPath()}/outputs"

        dependsOn "assemble${variant.name.capitalize()}"
        from(zipTree("${outputDir}/aar/${archiveName}.aar"))
        into("${outputDir}/jar/")
        include('classes.jar')
        rename ('classes.jar', "${archiveName}-${variant.mergedFlavor.versionName}.jar")
    }

    makeJar.dependsOn tasks[taskName]
}

কৌতূহলী পাঠকের জন্য, আমি com.android.library প্লাগইন .aar ফাইলগুলির নাম ব্যবহার করার জন্য সঠিক ভেরিয়েবল এবং পরামিতিগুলি নির্ধারণ করতে সংগ্রাম করেছি। অবশেষে আমি সেগুলি এখানে অ্যান্ড্রয়েড ওপেন সোর্স প্রকল্পে পেয়েছি ।


4

আমরা অ্যান্ড্রয়েড স্টুডিওর দ্বারা সংস্থান ফাইলগুলি ছাড়াই অ্যান্ড্রয়েড লাইব্রেরি প্রকল্পের জন্য একটি জার ফাইল রফতানি করতে পারি। আমি সম্প্রতি যা পূরণ করেছি এটিও প্রয়োজনীয়।

1. আপনার বিল্ড.gradle ফাইলটি কনফিগার করুন

    // Task to delete old jar

    task clearJar(type: Delete){
       delete 'release/lunademo.jar'
    }

    // task to export contents as jar
    task makeJar(type: Copy) {
       from ('build/intermediates/bundles/release/')
       into ('build/libs/')
       include ('classes.jar')
       rename('classes.jar', 'lunademo.jar')
    }
    makeJar.dependsOn(clearJar, build)

আপনার প্রকল্পের মূলের অধীনে গ্রেডলিউ মেকজার চালান Run

আপনি ভাগ্যক্রমে আপনি লির / বিল্ডস হিসাবে আপনার libs দেখতে পাবেন / যদি আপনি ভাগ্যবান হন।

=================================================== ==========

আপনি যদি নীচের মত কমান্ড লাইনে "সকেট টাইমআউট ব্যতিক্রম" হিসাবে ইস্যুটি পূরণ করেছেন,

এখানে চিত্র বর্ণনা লিখুন

আপনি ডান অংশে গ্রেডল উইন্ডোটি খুলতে এই পদক্ষেপগুলি অনুসরণ করতে পারেন এবং অ্যান্ড্রয়েড স্টুডিওতে "মেকজার" ক্লিক করতে পারেন,

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

তারপরে / libs dir তৈরি করতে যান, আপনি আপনার জার ফাইলটি দেখতে পাবেন।

আশা করি এটি আপনার পক্ষে সহায়ক।

শুভকামনা। @

লুনা

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