android - "فشل التحويل إلى تنسيق Dalvik مع وجود خطأ 1" على JAR خارجي




android-sdk-1.6 (20)

في تطبيق Android لدي في Eclipse ، أحصل على الخطأ التالي.

غير مفهومة الاستبعاد أعلى مستوى:
java.lang.IllegalArgumentException: تمت إضافته بالفعل: Lorg / xmlpull / v1 / XmlPullParser؛
....
فشل التحويل إلى تنسيق Dalvik بسبب الخطأ 1

يظهر هذا الخطأ فقط عند إضافة ملف JAR خارجي محدد إلى مشروعي. بحثت لفترة طويلة عن الحل الممكن ، لكن لا أحد من الحلول الممكنة يعمل. حتى أنني حاولت التغيير إلى Android 1.6 بدلاً من 1.5 (الإصدار الحالي الذي أستخدمه).


أستخدم Android 1.6 وكان لدي ملف JAR خارجي. ما نجح في عملي هو إزالة جميع المكتبات ، والنقر بزر الماوس الأيمن على المشروع واختيار أدوات Android -> * Fix Project Properties (التي أضافت Android 1.6) ثم إعادة إضافة ملف JAR الخارجي.


أي من الحلول المذكورة عملت بالنسبة لي.

هنا حيث كنت أواجه مشكلة:

أضفت jSoup ملف JAR الخارجي إلى مسار مشروعي من خلال وضعه أولاً في مجلد مصدر يسمى "libs" ، ثم النقر بزر الماوس الأيمن فوقه ، وبناء المسار -> إضافة لإنشاء مسار. هذا ألقى خطأ التحويل Dalvik. لقد ذكرت أني قد "ضمنت بالفعل" فصلًا من ملف JAR هذا. نظرت حول دليل المشروع ووجدت أن المكان الذي "تم تضمينه بالفعل" كان في الواقع مجلد bin . لقد قمت بحذف ملف JAR من دليل bin وقمت بتحديث المشروع في Eclipse وخطي الخطأ!


إذا كان لديك ADT مراجعة 12+ ، يجب عليك تحديث Proguard الخاص بك من 4.4 -> 4.6 (كما هو موضح here ). أيضا ، يجب عليك مغادرة الملف ... \ bin \ proguard.bat في النموذج الأصلي.

ما عليك سوى تنزيله من الويب ، ونسخ مجلد lib من الحزمة التي تم تنزيلها إلى:

[Android SDK Installation Directory] \ tools \ proguard \ lib


إن الحل الخاص والوحيد الذي وجدته اليوم بعد أربع ساعات من اختبار جميع الحلول ، هو مزيج من العديد من الحلول المقدمة هنا:

  • Delete المشروع من Eclipse
  • احذف الملفات في \bin و \gen من مجلد المشروع
  • قم بإزالة المراجع إلى المكتبات إلى ملف .classpath في مجلد مشروع الجذر
  • قم بإعادة تشغيل Eclipse باستخدام سطر الأوامر: eclipse -clean
  • مشروع Import
  • انقر بزر الماوس الأيمن على المشروع - حدد Properties > Java Build Path > Libraries وقم بإزالة أي شيء آخر غير Android XX.Y
  • أخيرًا ، clean المشروع ، انتظر المبنى التلقائي أو قم Build
  • إطلاق والآن يعمل! على الأقل بالنسبة لي...

حاولت كل خطوة في وقت واحد والعديد من المجموعات ، ولكن فقط سلسلة من الخطوات في كل مرة جعلت من ذلك! آمل ألا أواجه هذا مجددًا ...


انتقل إلى المشروع »خصائص» جافا بناء المسار »المكتبات وإزالة جميع ما عدا" الروبوت XY "(في حالتي أندرويد 1.5). انقر فوق موافق. اذهب إلى Project »Clean» قم بتنظيف المشروعات المحددة أدناه »حدد مشروعك وانقر فوق OK. التي يجب أن تعمل.

من الممكن أيضًا أن يكون لديك ملف JAR في مكان ما في مجلدات مشروعك (لقد قمت بنسخ ملف AdMob JAR إلى مجلد src الخاص بي) ثم أضفته كملف Java Path Library. لا تظهر ضمن "مستكشف الحزم" ، لذلك لا تلاحظ ذلك ، ولكن يتم حسابها مرتين ، مما يؤدي إلى خطأ Dalvik اللعين 1.

قد يكون سبب آخر محتمل تعارضات اسم الحزمة. لنفترض أن لديك حزمة com.abc.xyz وفئة تسمى A.java داخل هذه الحزمة ، ومشروع مكتبة آخر (الذي تتم إضافته إلى تبعية هذا المشروع) الذي يحتوي على نفس com.abc.xyz.A.java ، عندها ستحصل على نفس الخطأ بالضبط. هذا يعني أن لديك إشارات متعددة إلى نفس الملف A.java ولا يمكن بناءه بشكل صحيح.

بطرق أخرى قد يحدث هذا إذا قمت بتعديل أو إضافة أي شيء في ملف مسار الفصل يدويًا أو عن قصد. في حالات معينة قد نضيف مسار android.jar يدويًا إلى ملف classpath لتوليد java doc.On إزالة ذلك بعد إنشاء javadoc رمز سيعمل بشكل جيد. يرجى التحقق من هذا أيضا إذا كان أي واحد لا يزال يحدث.


بالنسبة لي ، ظهر مرجع JAR إضافي في مسار الإنشاء. أنا حذفت هذا ، وهو يعمل الآن.


تحديث Proguard إلى أحدث إصدار حلها بالنسبة لي.

  • كان مسار Proguard هو C:\Program Files (x86)\Android\android-sdk\tools\proguard\
  • لقد قمت بتنزيل النسخة الجديدة من here
  • واستبدل كل من حافظتي bin و lib

الحمد لله!


جميع الحلول أعلاه لم تنجح بالنسبة لي. أنا لا أستخدم أي. أستخدم LVL وأخطاء Dalvik حيث تتعلق جميعها بمكتبة ترخيص السوق.

تم حل المشكلة عن طريق حذف المشروع الرئيسي وإعادة تقديمه (إنشاء مشروع جديد من المصادر الموجودة).


عملت ببساطة تنظيف المشروع بالنسبة لي في كل مرة يأتي هذا الخطأ.


فقط للأشخاص الآخرين الذين لا يزال لديهم هذه المشكلة وقد حاولوا الإجابة المذكورة أعلاه ولكن لا يزال الحصول على الخطأ (الذي كان حالتي) ، ثم كان الحل الخاص بي لحذف المشروع من Eclipse وإعادة استيراده مرة أخرى.

هذا جعل مكتبة أندرويد تتم إضافتها مرة أخرى إلى المكتبات المرجعية الخاصة بي ، لذلك لدي الآن ملفين JAR Android المشار إليهما ، ومن ثم قمت بحذف واحدة منها والآن يتم تجميعها بشكل جيد.

الحل: احذف المشروع من Eclipse IDE ثم أعد استيراده مرة أخرى ، ثم تحقق من الحلول المذكورة أعلاه.


في حالتي المشكلة هي في الواقع مع مشروع API OpenFeint. لقد أضفت OpenFeint كمشروع مكتبة:

.

يتم إضافته أيضًا إلى مسار الإنشاء ، وتعطي أدوات ADT 16 خطأً في هذا السيناريو.

انقر بزر الماوس الأيمن على المشروع الخاص بك وانقر فوق بناء المسار ، تكوين مسار بناء ثم انظر الصورة وإزالة مشروع OpenFeint من هنا ويتم كل شيء :)


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

لكن إغلاق المشروع في Eclipse ثم إعادة فتحه يبدو أنه يثبت في تلك الحالات ...


لقد تعاملت مع هذه المشكلة عند استخدام مكتبة Sherlock ActionBar في المشروع الخاص بي. يمكنك القيام بالخطوة التالية ، إنه عمل بالنسبة لي.

  1. انقر بزر الماوس الأيمن على المشروع الخاص بك ، حدد خصائص.
  2. سيظهر مربع حوار ، حدد "مسار إنشاء جافا" في القائمة اليمنى.
  3. أزل "تبعيات Android" و "مكتبات Android الخاصة" على اللوحة اليمنى ، ثم انقر على "موافق"
  4. قم بتنظيف مشروعك (اختر القائمة Project -> Clean)
  5. انقر بزر الماوس الأيمن على مشروعك ، وحدد أدوات Android -> إصلاح خصائص المشروع
  6. تنظيف المشروع مرة أخرى.
  7. قم بإعادة تشغيل جهاز الحاسوب الخاص بك
  8. كسوف مفتوح وتصدير apk

آمل أن ذلك سيساعدك.


لقد واجهت هذه المشكلة لأن Android-Maven-plugin في Eclipse لم يتعرف على ما يبدو على مراجع ومراجع متعدية تمت الإشارة إليها مرتين من بعض المشاريع (بما في ذلك مشروع مكتبة Android) ، وتضمينها أكثر من مرة. اضطررت إلى استخدام hocus-pocus لإدراج كل شيء مرة واحدة فقط ، على الرغم من أنه من المفترض أن يعتني Maven بكل هذا.

على سبيل المثال ، كان لديّ مكتبة أساسية عالمية ، والتي تم استخدامها أيضًا من قبل globalmentor-google و globalmentor-android (الأخير هو مكتبة Android). في globalmentor-android pom.xml كان علي أن أضع علامة على التبعية على أنها "مقدمة" وكذلك استبعدت من المكتبات الأخرى التي تم تضمينها بشكل pom.xml :

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-core</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!-- android-maven-plugin can't seem to automatically keep this from being
             included twice; it must therefore be included manually (either explicitly
             or transitively) in dependent projects -->
        <scope>provided</scope>
    </dependency>

ثم في pom.xml التطبيق النهائي pom.xml لاستخدام الخدعة الصحيحة للسماح لمسار إدراج واحد فقط --- فضلا عن عدم صراحة بما في ذلك المكتبة الأساسية:

    <!-- android-maven-plugin can't seem to automatically keep this from being
        included twice -->
    <!-- <dependency> -->
    <!-- <groupId>com.globalmentor</groupId> -->
    <!-- <artifactId>globalmentor-core</artifactId> -->
    <!-- <version>1.0-SNAPSHOT</version> -->
    <!-- </dependency> -->

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-google</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <!-- android-maven-plugin can't seem to automatically keep this from
                being included twice -->
            <exclusion>
                <groupId>com.globalmentor</groupId>
                <artifactId>globalmentor-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-android</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

لقد وجدت شيء آخر. يستخدم Android دليل /libs لملفات JAR. لقد رأيت الخطأ "التحويل إلى تنسيق Dalvik فشل مع الخطأ 1" عدة مرات ، دائمًا عندما أخطأت في ملفات JAR الخاصة بي.

الآن قمت بترقية Roboguice إلى إصدار أحدث ، عن طريق وضع ملف JAR الجديد في دليل /libs وتحويل مسار الفصل إلى الإصدار الجديد. التي تسببت في خطأ Dalvik.

عندما أزلت أحد ملفات Roboguice JAR من مجلد /libs ، اختفى الخطأ. على ما يبدو ، يلتقط Android جميع ملفات JAR من /libs ، بغض النظر عن تلك التي تحددها في مسار إنشاء جافا. لا أتذكر بالضبط ، ولكن أعتقد أن Android بدأ في استخدام /libs افتراضيًا بدءًا من Android 4.0 (Ice Cream Sandwich، ICS).


هنا سيناريو آخر ، والحل:

إذا قمت بتشغيل هذه المشكلة مؤخراً بعد تحديث ADT لـ Eclipse:

  1. في مشروع التطبيق الخاص بك ، تحقق من وجود أي مجلدات مصدر مرتبطة تشير إلى مشاريع المكتبة الخاصة بك (لديهم أسماء في النموذج "LibraryName_src").
  2. حدد كل تلك المشاريع ، انقر بزر الماوس الأيمن ، واختر " Build Path " -> " Remove from Build Path ".
  3. اختر " إلغاء ارتباط المجلد أيضًا من المشروع " ، ثم انقر فوق " نعم ".
  4. تنظيف وإعادة بناء وإعادة توزيع المشروع.

يبدو أن السبب هو أن بعض الإصدارات السابقة من مجلدات مصدر مشروع المكتبة المرتبطة ADT إلى مشاريع "الطفل" ، والتوليفة ADT / Dex الحالية غير متوافق مع هذا الحل بعد الآن.

EDIT: تم تأكيد ذلك من خلال إدخال مدونة Dev Dev ، وتحديدًا هذه المشاركة - راجع الفقرة الثامنة فصاعدًا.


واجهت هذه المشكلة بنفسي اليوم. تنظيف وإعادة بناء لم يصلح المشكلة. لم يساعد حذف وإعادة استيراد المشروع أيضًا.

وأخيراً تتبعها مرة أخرى إلى إضافات سيئة إلى ملف .class الخاص بي. أعتقد أن هذا تم إضافته بواسطة أدوات المكوِّن الإضافي عندما كنت أحاول إصلاح مشكلة أخرى ، فأزالتها تخلصت من خطأ "التحويل إلى تنسيق Dalvik فشلت مع الخطأ 1":

<classpathentry kind="lib" path="C:/dev/repository/android-sdk-windows/platforms/android-3/android.jar">
    <attributes>
        <attribute name="javadoc_location" value="file:/C:/dev/repository/android-sdk-windows/docs/reference"/>
    </attributes>
    <accessrules>
        <accessrule kind="nonaccessible" pattern="com/android/internal/**"/>
    </accessrules>


يمكن أن يحدث هذا أيضًا إذا قمت بإضافة ملف Android.jar إلى مسار Android.jar الخاص بك ، ربما عن طريق إصلاح سريع غير مقصود في Eclipse. إزالته بالنقر بزر الماوس الأيمن على المشروع -> مسار البناء -> تكوين مسار البناء -> android.jar ، وإزالة.


تحرير (حل جديد):

يبدو أن الحل السابق هو مجرد تجاوز. تمكنت في النهاية من حل المشكلة بشكل دائم: في حالتي كان هناك عدم تطابق في ملفات android-support-v4 في مشروعي وفي مشروع Facebook المشار إليه في مشروعي.

لقد عثرت على هذا الخطأ عن طريق إجراء فحص Lint (أدوات Android / Run Lint: التحقق من الأخطاء الشائعة)

حلّي السابق:

لقد حاولت أي حل ممكن على هذا الموقع - لا شيء ساعد !!!

أخيرًا ، وجدت إجابة هنا: https://groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4

خطوات سهلة:

انتقل إلى Project -> قم بإلغاء تحديد Build تلقائيًا

انتقل إلى المشروع -> تنظيف ... ، نظّف كل من مشروع المكتبة ومشروع تطبيقك

تصدير تطبيقك كملف APK موقّع في حين أن Build تلقائيًّا ما زال معطلاً


فقط قم بتنظيف المشروع

إذا كان هذا لا يعمل جرب الحلول الأخرى





android-sdk-1.6