অ্যান্ড্রয়েড এম এর জন্য বিল্ড.গ্রেডের সংকলন-সময় নির্ভরতা হিসাবে অ্যাপাচি এইচটিটিপি এপিআই (উত্তরাধিকার) কীভাবে যুক্ত করবেন?


97

এখানে উল্লিখিত হিসাবে , অ্যান্ড্রয়েড এম অ্যাপাচি এইচটিটিপি এপিআই সমর্থন করবে না। দস্তাবেজগুলি এতে বলে:

পরিবর্তে এইচটিপিআরএল সংযোগ বিভাগ ব্যবহার করুন।

বা

অ্যাপাচি এইচটিটিপি এপিআইগুলি ব্যবহার চালিয়ে যেতে, আপনাকে প্রথমে আপনার বিল্ড.gradle ফাইলটিতে নিম্নলিখিত সংকলন-সময় নির্ভরতা ঘোষণা করতে হবে:

অ্যান্ড্রয়েড {useLibrary 'org.apache.http.legacy'}

আমি আমার প্রকল্পের বেশিরভাগ ব্যবহারের এইচটিপিপ্লিনেন্টের ব্যবহারকে এইচটিটিপিআরএল সংযোগে রূপান্তর করেছি, তবে এখনও কয়েকটি ক্ষেত্রে আমার এইচটিপিপিলেট ব্যবহার করা দরকার to অতএব, আমি 'org.apache.http.legacy' কে একটি সংকলন-সময় নির্ভরতা হিসাবে ঘোষণা করার চেষ্টা করছি তবে বিল্ড.gradle এ একটি ত্রুটি পাচ্ছি:

গ্রেডেল ডিএসএল পদ্ধতি পাওয়া যায় নি: 'ইউজলিবারি ()'

আমার প্রশ্নটি: আমি কীভাবে 'org.apache.http.legacy' কে আমার প্রকল্পের একটি সংকলন-সময় নির্ভরতা হিসাবে ঘোষণা করব?

কোন সাহায্যের অনেক প্রশংসা করা হয়। ধন্যবাদ


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

তাত্ক্ষণিক প্রতিক্রিয়াটির জন্য ধন্যবাদ @ কমন্সওয়্যার ... আপনি কি শীর্ষ স্তরের বিল্ড.gradle ফাইলটিতে "শ্রেণিপথ" com.android.tools.build:gradleuthor.0.0 '"লাইনটি উল্লেখ করছেন?
বিরাট সিং

4
হ্যাঁ. আমি বরং অবাক করা হবে যদি 1.0.0গেছে useLibraryজিনিস। এটি সম্ভবত 1.3.x এর আগে তৈরি হয়েছিল, যাতে আপনি চেষ্টা করতে পারেন 1.2.3(এএফআইএকে, সর্বশেষ প্রযোজনা রিলিজ) এবং দেখুন কী ঘটে।
কমন্সওয়্যার

আমি কেবল '1.2.3' চেষ্টা করেছি এবং ভাগ্য নেই - একই ত্রুটি -> "গ্রেডল ডিএসএল পদ্ধতি পাওয়া যায় নি: 'ইউজলিবারিয়ান ()'": /
বিরাট সিং

হ্যাঁ, যেহেতু এটি এম বিকাশকারী পূর্বরূপের সাথে আবদ্ধ, তাই আমি তাতে হতবাক হই না। সম্ভবত আপনার প্রয়োজন 1.3.0-rc2(বা নতুন কিছু আছে, যদি সেখানে থাকে)।
কমন্সওয়্যার

উত্তর:


173

23 এর জন্য:

শীর্ষ স্তরের বিল্ড.gradle - / বিল্ড.gradle

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.1'
    }
}
...

মডিউল নির্দিষ্ট বিল্ড.gradle - /app/build.gradle

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"
    useLibrary 'org.apache.http.legacy'
    ...
}

অফিশিয়াল ডক্স (যদিও পূর্বরূপের জন্য): http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavi-apache-http-client

সর্বশেষ অ্যান্ড্রয়েড gradle প্লাগইন পরিবর্তণের: http://tools.android.com/tech-docs/new-build-system


4
আমি গ্রেড বিল্ড সংস্করণ আপডেট করি এবং তারপরে অ্যাপাচের জন্য ব্যবহারের লাইব্রেরি ঘোষণা করি তবে তবুও ত্রুটিটি পাচ্ছি: ত্রুটি: (204, 13) ত্রুটি: প্রতীক শ্রেণিটি খুঁজে পাচ্ছে না ডিফল্ট এইচটিপিপ্লায়েন্ট ত্রুটি: (204, 48) ত্রুটি: প্রতীক শ্রেণিটি ডিফল্ট এইচটিএলপিএল ক্লায়েন্টটি খুঁজে পাচ্ছে না: (২০৫, ১৩) ত্রুটি: প্রতীক শ্রেণিটি এইচটিপিপোস্টের ত্রুটিটি খুঁজে পাচ্ছে না: (২০৫, ৩)) ত্রুটি: প্রতীক শ্রেণিটি খুঁজে পাচ্ছে না এইচটিপিপোস্ট ত্রুটি: (207, 13) ত্রুটি: প্রতীক শ্রেণিটি খুঁজে পাচ্ছে না এইচটিটিপিআরস্পোন ত্রুটি: (208, 13) ত্রুটি: পাওয়া যায় না প্রতীক শ্রেণীর এইচটিপিএন্টিটি ত্রুটিটি অনুসন্ধান করুন: (209, 19) ত্রুটি: প্রতীক ভেরিয়েবল সত্তাটি খুঁজে পাবে না অ্যান্টিটিটিলাস
বর্ণিত খান্দেলওয়াল

4
উত্তরটি থেকে আমি কিছু মিস করেছি: গ্রেড শ্রেণিপথটি আপনার অ্যাপ্লিকেশন শীর্ষ স্তরের বিল্ড ফাইলে রয়েছে তা নিশ্চিত করতে হবে, যেখানে useLibraryঅবশ্যই আপনার অ্যাপ্লিকেশন নির্দিষ্ট বিল্ড ফাইলের মধ্যে থাকা আবশ্যক।
গ্রামীণ

উপরের সমাধানটি কাজ করার জন্য এই জার ফাইলটি যুক্ত করতে ভুলবেন না :)
শেরাজ আহমেদ খিলজি

@ শিরাজের আর প্রয়োজন নেই - গ্রেড বিল্ড এটি স্বয়ংক্রিয়ভাবে তুলে নিয়েছে
রিচার্ড লে ম্যাসুরিয়ার

4
@ রতুল আপনার এই packagingOptions {}ব্লকের ভিতরে একটি ব্লক যুক্ত করা উচিত android, যোগ করুন exclude 'META-INF/LICENSE'... (প্রতিলিপি প্রতি ফাইলের প্রতিটি লাইন প্রতিবেদন করা হয়েছে)
হিদ্রো

28

অন্য বিকল্পটি হ'ল কেবল জোবন্ডল নির্ভরতা যুক্ত করা। এটি আরও অ্যান্ড্রয়েড স্টুডিও বন্ধুত্বপূর্ণ কারণ অ্যান্ড্রয়েড স্টুডিও "প্রতীক সমাধান করতে পারে না ..." বার্তাটি দেয় না

 dependencies {
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
 }

এটি mavenCentral () সংগ্রহস্থলগুলিতে উপলব্ধ।
nexDev

এটি সংকলন করা যায় না: ত্রুটি: কার্যের জন্য কার্যকর করা ব্যর্থ হয়েছে ': <প্রজ> প্যাকেজ <প্রজ> ডিবাগ'। > / ব্যবহারকারীদের << ব্যবহারকারীর / ডকুমেন্টস / << প্রকল্প> / << ক্রিয়াকলাপ / বিল্ড / ইনটারমিডিয়েটস / ক্লাসস- প্রগার্ড / << প্রকল্প >/debug/classes.jar
ইউরি

আপনি অগ্রগতি ছাড়াই সংকলন (পুনর্নির্মাণ) চেষ্টা করেছেন?
nexDev

আপনি কি দয়া করে একটি নমুনা প্রকল্প এটির সাথে কাজ করতে পারেন? এখন আমি এই ত্রুটিটি পাচ্ছি: ত্রুটি: কার্য ': অ্যাপ্লিকেশন: প্যাকেজএলসাইঙ্কমিপডিব্যাগচ্লাসফোর্ড মাল্টিডেক্স' এর জন্য কার্যকর করা ব্যর্থ। > java.util.zip.ZipException: সদৃশ এন্ট্রি: org / অ্যাপাচি / HTTP / টীকাদান / গার্ডেডবাইক্র্লাস
অ্যান্ড্রয়েড বিকাশকারী

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

16

অ্যান্ড্রয়েড 9 (পাই) এর জন্য নোট।

অতিরিক্ত হিসাবে useLibrary 'org.apache.http.legacy'আপনাকে এন্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল যুক্ত করতে হবে:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

সূত্র: https://developer.android.com/about/versions/pie/android-9.0-changes-28


13

আপনার build.gradle ফাইল যোগ useLibrary 'org.apache.http.legacy' অনুযায়ী Android 6.0 Changes> Apache HTTP Client Removalনোট।

android {
    ...
    useLibrary 'org.apache.http.legacy'
    ...
}

লিঙ্ক ত্রুটি অনুপস্থিত এড়ানোর জন্য নির্ভরতা যুক্ত করুন

dependencies {
    provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

'প্রদত্ত' ব্যবহার করে নির্ভরতাটি এপিকে অন্তর্ভুক্ত করা হবে না


11

: শুধু ফাইল কপি org.apache.http.legacy.jarথেকে Android/Sdk/platforms/android-23/optionalপ্রকল্পের ফোল্ডারে ফোল্ডারের app/libs

23.1.1 এর জন্য কবজির মতো কাজ করেছেন।


2

আমি এই সমস্যার মতো সমাধান করেছি:

১) জিইউজি উল্লিখিত হিসাবে শীর্ষ-স্তরের বিল্ড ফাইলে শ্রেণিপথ সেট করুন:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0-beta2'
    }
    allprojects {
        repositories {
           jcenter()
        }
    }
}

২) নির্দিষ্ট মডিউলটির বিল্ড ফাইলটিতে:

android {
   useLibrary 'org.apache.http.legacy'
   compileSdkVersion 'android-MNC'
   buildToolsVersion '23.0.0 rc3'
}

2

উত্তরগুলি কিছুটা পুরানো হওয়ায় আমি আমার সমাধানটি রাখব (আমার জন্য কী কাজ করেছিল), এটি অন্য কারও পক্ষে সহায়ক হতে পারে ... আমি আমার সমাধানটি অ্যাপাচি- র অফিসিয়াল ডকুমেন্টেশন থেকে নিয়েছি , কোনও কাজ নেই।

1 / গ্রেডে:

dependencies {
...
// This is the maintained version from apache.
compile group: 'cz.msebera.android', name: 'httpclient', version: '4.4.1.1'
}

2 / অ্যাপের বাকি অংশে প্রতিস্থাপন করুন org.apache.http দ্বারা cz.msebera.android.httpclientএবং সব আপনার আমদানির (নির্ভরতা) সংশোধন করা হবে। আপনি কেবল সিটিআরএল + শিফট + আর করতে পারেন এবং পুরো প্রকল্পে এটি প্রতিস্থাপন করতে পারেন।


2

এটি সাহায্য করা উচিত:

android {
    ...
    useLibrary 'org.apache.http.legacy'
    ...
}

লিঙ্ক ত্রুটি অনুপস্থিত এড়ানোর জন্য নির্ভরতা যুক্ত করুন

dependencies {
    provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

বা

dependencies {
    compileOnly 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

কারণ

Warning: Configuration 'provided' is obsolete and has been replaced with 'compileOnly'.

বা প্রদত্ত পরিবর্তে সংকলন দিন উভয়ই কাজ হবে
logeshwaran

উপরের কনফিগারেশন সহ, আমি ত্রুটির সাথে দেখা করেছি: (155, 0) গ্রেডেল ডিএসএল পদ্ধতি পাওয়া যায় নি: 'সরবরাহিত ()'
আরএফএফ

1

এফডাব্লুআইডাব্লিউ কিছু আগে আগে অ্যাপাচি লাইব্রেরি অপসারণের পূর্বসূত্র ছিল। আমাদের ভাল বন্ধু জেসি উইলসন ২০১১ সালে আমাদের একটি ক্লু ফিরিয়ে দিয়েছিল: http://android-developers.blogspot.com/2011/09/androids-http-clients.html

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

<rant> যারা আপনাকে অ্যাপাচি এইচটিটিপি ক্লায়েন্টের সাথে লেগে থাকার জন্য জোর দিয়েছিলেন তাদের সাথে আমার কতগুলি প্রযুক্তিগত যুক্তি রয়েছে তা আমি বলতে পারি না। এমন কয়েকটি বড় অ্যাপ রয়েছে যা ভাঙতে চলেছে কারণ আমার পূর্বের নিয়োগকর্তারা নন-পূর্ব-নিয়োগকারীরা তাদের শীর্ষ প্রকৌশলীগুলির কথায় কান দেয়নি বা জানত যে তারা যখন সাবধানবাণীটিকে অগ্রাহ্য করেছিল তখন তারা কী সম্পর্কে কথা বলছিল ... তবে, জল অধীনে সেতু.

আমি জিতেছি.

</rant>


4
আমার বোধগম্যতা হ'ল অ্যাপাচি এইচটিপিপিলেটটি অ্যান্ড্রয়েড -23 এ লুকানো আছে তবে বাস্তবে সরানো হয়নি। অপসারণ পূর্ববর্তী প্ল্যাটফর্মগুলিকে লক্ষ্য করে প্রচুর বিদ্যমান ক্লায়েন্টকে ভেঙে ফেলবে, যেখানে এইচটিটিপিপ্লিয়েন্টটি গোপন নেই এবং এই বিদ্যমান অ্যাপ্লিকেশনগুলি এখনও অ্যান্ড্রয়েড -23 এ চালিত হবে বলে আশা করা হচ্ছে। অ্যান্ড্রয়েড -৩৩ এ ইউজলিবারি যুক্ত করে এই উত্তরাধিকার শ্রেণিগুলি বুট ক্লাসপ্যাথে সংযুক্ত করে, যা প্ল্যাটফর্ম দ্বারা সরবরাহ করা শ্রেণীর তালিকায় রয়েছে। এটি অ্যান্ড্রয়েড -৩৩ এ মূলত ক্লাসগুলি আনহাইড করে।
জো বোবিয়ার

যখন কোনও শ্রেণি অবচয় করা হয় তখন এটিকে এগিয়ে যাওয়া থেকে বিরত রাখার জন্য প্রথমে এটি আড়াল করা সাধারণ। তারপরে সময় হিসাবে এটি সরানো যেতে পারে। এর মতো কিছু: বর্তমান সংস্করণে অবচয় অনুসারে চিহ্নিত করুন। 2. দ্বিতীয় সংস্করণে লুকান। ৩. পুরানো শ্রেণি সম্পূর্ণরূপে মুছে ফেলার জন্য সমস্ত কোড রিফ্যাক্টর।
কোডার রোডি

0

সমস্যাগুলি সমাধান করার জন্য আপনি নীচের সরঞ্জামগুলি গ্রেড গ্রেড নির্ভরতা ব্যবহার করে বিল্ড সরঞ্জামগুলির সংস্করণ "23.0.0 আরসি 2" ব্যবহার করছেন তা নিশ্চিত করুন:

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