मैं इस stackoverflow posting के समान कुछ करने की कोशिश कर रहा हूं। मैं क्या करना चाहता हूं एसडी कार्ड से किसी गतिविधि या सेवा की परिभाषा को पढ़ना है। स्पष्ट अनुमति समस्याओं से बचने के लिए, मैं .apk में इस गतिविधि का एक खोल संस्करण बनाता हूं, लेकिन इसे रन टाइम पर एसडी कार्ड पर रहने वाले उसी नाम की गतिविधि के साथ बदलने की कोशिश करता हूं। दुर्भाग्यवश, मैं DexClassLoader का उपयोग कर एसडी कार्ड से गतिविधि श्रेणी परिभाषा को लोड करने में सक्षम हूं, लेकिन मूल श्रेणी परिभाषा वह है जिसे निष्पादित किया जाता है। क्या यह निर्दिष्ट करने का कोई तरीका है कि नई कक्षा परिभाषा पुराने में बदलती है, या वास्तव में पैकेज में आवश्यक गतिविधि प्रदान किए बिना मेनिफेस्ट अनुमति समस्याओं से बचने के किसी भी सुझाव को बदलती है? कोड नमूना:एंड्रॉइड, किसी गतिविधि या सेवा को गतिशील रूप से बदलने के लिए DexClassLoader का उपयोग कैसे करें
com.android.my.path.to.a.loaded.activity
/sdcard/mypath/My.apk
में निर्दिष्ट शुरू करने का
ClassLoader cl = new DexClassLoader("/sdcard/mypath/My.apk",
getFilesDir().getAbsolutePath(),
null,
MainActivity.class.getClassLoader());
try {
Class<?> c = cl.loadClass("com.android.my.path.to.a.loaded.activity");
Intent i = new Intent(getBaseContext(), c);
startActivity(i);
}
catch (Exception e) {
intead, यह गतिविधि स्थिर परियोजना में लोड की शुरूआत।
मुझे एहसास है कि एंड्रॉइड संपत्तियों को कैसे प्रबंधित करता है इस वजह से यह नहीं किया जा सकता है। यदि आपने किसी अन्य एप्लिकेशन में कक्षा पर स्टार्टएक्टिविटी कहा है तो उसे उस एप्लिकेशन के थ्रेड में लोड करना होगा, न कि एंड्रॉइड के इरादे के लिए यह एक खतरनाक विकल्प होगा। – Tom