2012-02-11 34 views
0

在.NET上,我可以使用“反射”在运行时加载DLL库。这使我可以为我的应用程序构建一些附加组件。Android - 构建支持加载项的应用程序

在Android上,有什么办法可以做到这一点?我想制作一个附加组件,安装后可以从我的Android应用程序中调用。

我的第一个想法是建立另一个APK到这个附加组件。然后,我的应用程序应该循环遍历已安装的软件包,以查看附加组件是否存在。

之后,我如何加载该包(及其所拥有的活动)并将其用于我的应用程序?需要考虑的另一个细节是add-on需要访问主应用程序的相同数据库。

有谁知道我该怎么做?

非常感谢!

+0

Android是Java。据我所知,思考是在Java中引入的。你可以使用相同的技术,不是吗? – 2012-02-11 00:56:44

回答

8

使用PackageManager,您可以查询所有已安装软件包(APK)上的系统上的活动/ etc。 Android SDK中的ApiDemos示例代码在类com.example.android.apis.ApiDemos中使用此代码。

代码示例:

void findAddOnActivities() { 
    Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); 
    mainIntent.addCategory("myPackage.intent.category.ADDON"); 

    PackageManager pm = getPackageManager(); 
    List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0); 
    // list contains all activities that match your filters in mainIntent 
} 

清单片段:

<activity 
     android:label="My external Add-on" 
     android:name=".addons.TestAddon" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="myPackage.intent.category.ADDON" /> 
     </intent-filter> 
    </activity> 

数据库访问和管理访问/修改安全: 声明在您的清单您自己的权限:

<permission android:name="com.mycompany.myapp.database.permission.READ" 
    android:label="@string/read_permission" android:protectionLevel="signatureOrSystem"></permission> 
<permission android:name="com.mycompany.myapp.database.permission.WRITE" 
    android:label="@string/write_permission" android:protectionLevel="signatureOrSystem"></permission> 

protectionLevel标签将确保只有pa的APK图像的rt或使用与主应用程序相同的密钥签名可以被授予该权限。

有许多方法可以让插件访问您的数据库。远程服务或提供接口将工作。在应用程序中,我有这样做,我的主应用程序有一个名为DBManager的类,它已经对数据库做了一堆读/写操作。所以我只是在我的外部应用程序中使用该类,并且它可以执行所有读/写操作,因为软件包使用相同的密钥进行签名。

如果您不想使用相同的密钥对软件包进行签名,请考虑使用示例代码RemoteService.java中的远程服务。请查看android service dev guide了解更多详情。我不是Android服务的专家,所以任何来自其他人的反馈都可能会有所帮助。

+0

你是男人。 – Phix 2012-03-14 04:38:55

+0

很高兴帮助过某人:)如果您遇到问题或改进,请告诉我! – MikeC 2012-03-14 05:38:39

相关问题