模块动态加载-总结

来源:互联网 发布:软件研发中心介绍 编辑:程序博客网 时间:2024/05/16 00:48

根据用户自己选择,动态加载模块。刚开始,没点路,听一朋友说:在MTK和symbian上可用动态库dll来解决问题,但android中,不通过jni是没法调用C++代码的。后来在网上搜索,因关键字不知道怎么写,所以一直没找到答案,后来在论坛上发帖,终于找到突破口,以下是寻求解决办法的帖子:

http://topic.csdn.net/u/20100824/09/b205efdf-34c3-47c8-8946-52a434898e0e.html

http://topic.csdn.net/u/20100820/09/0dfdb65a-66fc-4d84-bf1b-896e45fcd923.html

先感谢论坛上的兄弟,热情的讨论,给了我思路。

 

思路:将不同的模块做成不同的apk,需要加载什么模块,让程序直接去下载对应的apk文件即可,不同的apk之间,通过Intent或则包名 + 类名 来访问,即可,至于数据如何共享,我想应该是用ContentProvider去解决。数据共享这部分,我还没去试验。

先放上我今天下午测试的代码:

 

//从SD卡上安装下载下来的apk文件,该过程会出现一个询问用户的界面,出于安全考虑

Intent intent = new Intent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setAction(android.content.Intent.ACTION_VIEW);
    String type = "application/vnd.android.package-archive";
    intent.setDataAndType(Uri.parse("file://"+ "/sdcard/TestActty.apk"),type);
    startActivity(intent);

 

//从当前apk中进入到上一步安装好的apk中去,两种方法:

1、   通过包名,类名进行访问

    Intent mIntent = new Intent();
    ComponentName comp = new ComponentName("com.test.testaccty", "com.test.testaccty.TestActty");
    mIntent.setComponent(comp);
    startActivity(mIntent);

 

2、通过intent访问

    Intent intent = new Intent("android.acp.act"); 
    startActivity(intent);

 

 //android.acp.act 是一个activity对应的名称,如:

<activity android:name=".TestActty"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.acp.act" />//android.acp.act 在这里
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

   

 

明天有空,再验证下不同apk之间共享数据的问题。

 

原创粉丝点击