2012-08-30 104 views
1

http://android-developers.blogspot.in/2011/07/custom-class-loading-in-dalvik.html加載活動

此鏈接是指從二敏捷類加載,這是工作的罰款

,而不是調用一個簡單的方法,可以在二塞米鬆, 我試圖添加一個使用startActivity()從我的MainActivity活動二DEX,並試圖從我的MainActivity, 我得到ClassNotFound的錯誤,當我試圖訪問訪問/啓動活動

我也使用PathClassLoader嘗試 - 它也呈現出相同的錯誤

我們可以從MainActivity訪問/加載第二Dex中存在的活動嗎?

在多個Dex文件中保持活動的正確方法是什麼?

由於提前

+0

您是否成功啓動它?我無法成功找到該類:'05-20 17:11:10.028:E/AndroidRuntime(32561):java.lang.RuntimeException:無法實例化活動ComponentInfo {com.example.dex/com.example.dex。 lib.LibActivity}:java.lang.ClassNotFoundException:未在路徑中找到類「com.example.dex.lib.LibActivity」:DexPathList [[zip file] /data/app/com.example.dex-1.apk 「],nativeLibraryDirectories = [/ data/app-lib/com.example.dex-1,/ vendor/lib,/ system/lib]' – Zennichimaro

回答

0

當然可以,你需要的僅僅是提到在應用程序的清單文件中的活動細節。

還要確保活動的佈局文件在那裏。

示例:我打算從My Application中加載庫jar文件中的TestActivity。

TestActivity.class(寓於JAR文件):

public class TestActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(getIntent().getIntExtra("LAYOUT", -1)); 
} 

} 

MainActivity.class(寓於應用程序項目)

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 

    Intent intTest = new Intent(this, TestActivity.class); 
    intTest.putExtra("LAYOUT", R.layout.activity_test); 
    startActivity(intTest); 
} 

} 

佈局:actitivity.xml和activity_test.xml都應該駐留在應用的佈局文件夾。

需要在Manifestfile中提及TestActivity。

<activity android:name="yourPackage.TestActivity"></activity> 
+0

謝謝Eldhose, 另外請確保活動的佈局文件是* *那裏**。 你能告訴我,那裏**指的是什麼? –

+0

這意味着,jar中活動的佈局xml文件也應駐留在Application項目佈局文件夾中。將修改答案舉個例子。 –

+0

感謝Eldhose,之前嘗試過類似的方法,TestActivity不能直接從MainActivity引用,因爲它駐留在不同的dex文件中,我們需要使用Reflection來獲取TestActivity引用。一旦startActivity()執行,我得到ClassnotFound錯誤 –