example - toolbar android studio




كيفية إضافة Apache HTTP API(إرث) كتبعية وقت الترجمة إلى build.grade لنظام Android M؟ (7)

FWIW تم إزالة إزالة مكتبة Apache منذ فترة. قدم لنا صديقنا الطيب جيسي ويلسون فكرة في عام 2011: http://android-developers.blogspot.com/2011/09/androids-http-clients.html

توقفت Google عن العمل على ApacheHTTPClient منذ فترة ، لذا يجب وضع أي مكتبة لا تزال تعتمد على قائمة المكتبات المهملة ما لم يقم المشرفون بتحديث الكود الخاص بهم.

<rant> لا أستطيع أن أخبركم كم من الحجج التقنية التي أجريتها مع أشخاص أصروا على التمسك بعميل Apache HTTP. هناك بعض التطبيقات الرئيسية التي ستتحطم لأن الإدارة في أرباب العمل السابقين الذين لم يتم تسميتهم لم تستمع إلى أفضل مهندسيهم أو عرفت ما الذي كانوا يتحدثون عنه عندما تجاهلوا التحذير ... ولكن المياه تحت الجسر.

انا فزت.

</rant>

كما ذكر here ، لن يدعم Android M واجهة برمجة تطبيقات Apache HTTP. تنص المستندات على:

استخدم فئة HttpURLConnection بدلاً من ذلك.

أو

لمتابعة استخدام واجهات برمجة تطبيقات HTTP Apache ، يجب أولاً أن تعلن تبعية وقت الترجمة التالية في ملف build.gradle الخاص بك:

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

لقد قمت بتحويل الكثير من استخدام مشروعي من HttpClient إلى HttpURLConnection ، ومع ذلك ، ما زلت بحاجة لاستخدام HttpClient في مناطق قليلة. وبالتالي ، أحاول التصريح عن "org.apache.http.legacy" باعتباره تبعية وقت الترجمة ولكن تظهر لي رسالة خطأ في build.gradle:

لم يتم العثور على طريقة DSL للمهارة: 'useLibrary ()'

سؤالي هو: كيف يمكنني تعريف "org.apache.http.legacy" باعتماد وقت الترجمة في مشروعي؟

أي مساعدة هي محل تقدير كبير. شكر


بديل آخر هو مجرد إضافة التبعية jbundle. يعد هذا أكثر سهولة في Android Studio لأن Android Studio لا يعطي الرسالة "لا يمكن حل الرمز ..."

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

لحل المشكلات ، تأكد من استخدام إصدار أدوات الإنشاء "23.0.0 rc2" مع الأدوات التالية ، بناء تبعية gradle:

classpath 'com.android.tools.build:gradle:1.3.0-beta2'

لقد حللت هذه المشكلة مثل ذلك:

1.) قم بتعيين classpath في ملف بناء المستوى الأعلى كما ذكر GUG:

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

2.) في ملف بناء وحدة نمطية محددة:

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

ما عليك org.apache.http.legacy.jar نسخ الملف: org.apache.http.legacy.jar من المجلد Android/Sdk/platforms/android-23/optional المجلد Android/Sdk/platforms/android-23/optional إلى app/libs لمجلد المشروع.

عملت مثل سحر ل 23.1.1.


ملاحظة لنظام التشغيل Android 9 (الفطيرة).

بالإضافة إلى استخدام useLibrary 'org.apache.http.legacy' يجب عليك إضافته إلى AndroidManifest.xml:

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

المصدر: https://developer.android.com/about/versions/pie/android-9.0-changes-28


يجب أن يساعد:

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'.




android-6.0-marshmallow