के माध्यम से नहीं किया जा सकता है मुझे हाल ही में जारी किए गए फ्रैगमेंट समर्थन API का उपयोग करने वाले एंड्रॉइड एप्लिकेशन के विरुद्ध एंड्रॉइड यूनिट परीक्षण निष्पादित करने में समस्या है। जब परीक्षण एक FragmentActivity के खिलाफ चलाया जाता है तो निम्न त्रुटि लॉग में दिखाई देती है और कक्षा लोड करने में विफल रहता है। एक समान वर्ग के खिलाफ दौड़ते समय, लेकिन गतिविधि से प्राप्त एक परीक्षण परीक्षण ठीक काम करता है। दोनों कक्षाएं ऐप्स के रूप में सही तरीके से काम करती हैं! मतलब यह है कि जब बस बुलाया जाता है तो वे दोनों अपना लेआउट प्रदर्शित करते हैं और सही ढंग से कार्य करते हैं। समर्थन जार बिल्ड पथ का हिस्सा है और परियोजना में शामिल है।फ्रैगमेंट एक्टिविटी का परीक्षण ActivityInstrumentationTestCase2
मेरी समस्या यह है कि टुकड़ों का उपयोग करने का एकमात्र तरीका (और प्री 3.0 एंड्रॉइड का समर्थन) FragmentActivity का उपयोग करना है, लेकिन यदि यह स्वचालित परीक्षण को छोड़ देता है तो यह पुस्तकालय कितना अच्छा है।
4-05 18:00:11.276: WARN/dalvikvm(1095): Class resolved by unexpected DEX: Lcom/example/android/app/FragmentLayoutSupport;(0x406351a0):0x12e5c8 ref [Landroid/support/v4/app/FragmentActivity;] Landroid/support/v4/app/FragmentActivity;(0x406351a0):0x12e440
04-05 18:00:11.276: WARN/dalvikvm(1095): (Lcom/example/android/app/FragmentLayoutSupport; had used a different Landroid/support/v4/app/FragmentActivity; during pre-verification)
04-05 18:00:11.286: WARN/dalvikvm(1095): Unable to resolve superclass of Lcom/example/android/app/FragmentLayoutSupport; (49)
04-05 18:00:11.286: WARN/dalvikvm(1095): Link of class 'Lcom/example/android/app/FragmentLayoutSupport;' failed
04-05 18:00:11.286: ERROR/dalvikvm(1095): Could not find class 'com.example.android.app.FragmentLayoutSupport', referenced from method com.example.android.app.test.FrameLayoutTest.<init>
04-05 18:00:11.286: WARN/dalvikvm(1095): VFY: unable to resolve const-class 131 (Lcom/example/android/app/FragmentLayoutSupport;) in Lcom/example/android/app/test/FrameLayoutTest;
यहां कोड है जिसे मैंने इस मुद्दे को प्रदर्शित करने के लिए बनाया है। के रूप में इस प्रकार है और fragment_layout एक खाली LinearLayout है मैं बनाया है
FrameLayoutTest.java
public class FrameLayoutTest extends
ActivityInstrumentationTestCase2<FragmentLayoutSupport> {
public FrameLayoutTest() {
super(FragmentLayoutSupport.class);
}
public void testActivityTestCaseSetUpProperly() {
assertNotNull("activity should be launched successfully", getActivity());
}
}
दो वर्ग हैं::
FrameLayout.java
public class FragmentLayout extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout);
}
}
और
FragmentLayoutSupport.java
public class FragmentLayoutSupport extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout);
}
}
यही था के लिए क्लिक करें निर्यात आगे स्थित चेक बॉक्स। मैंने डीबग लॉग में उस पंक्ति को देखा, लेकिन उसने मुझे फेंक दिया। मैंने सोचा कि यह कह रहा था कि मैंने एंड्रॉइड-सपोर्ट-v4.jar के विभिन्न संस्करणों का उपयोग किया था, जो मैंने नहीं किया था। मुझे लगता है कि क्या हो रहा है कि प्रत्येक परियोजना के निर्माण के साथ उस जार फ़ाइल के अपने लिंकिंग के परिणामस्वरूप दो विशिष्ट एनकोडेड डीएक्स फाइलें हुईं। हल करने के लिए बहुत मुश्किल और अच्छा है। मैं सभी व्यावहारिक उद्देश्यों के लिए टुकड़ों को त्यागने के लिए लगभग तैयार था, अगर आप समर्थन lib का उपयोग करते हैं तो अवांछित। – securelpb
आप एक जीवन-बचतकर्ता हैं - यह मुझे तीन घंटे के लिए स्टंप कर रहा था। – tomtheguvnor
इसे सही उत्तर के रूप में क्यों स्वीकार नहीं किया गया था? – Bostone