【问题标题】:Android - Build an application that supports add-onsAndroid - 构建支持附加组件的应用程序
【发布时间】:2012-10-08 14:32:06
【问题描述】:

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

在 Android 上,有什么方法可以执行类似的操作吗?我想做一个插件,安装后可以从我的安卓应用中调用。

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

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

有人知道我该怎么做吗?

非常感谢!

【问题讨论】:

  • Android 是 Java。我记得,反射是在 Java 中引入的。您可以使用相同的技术,不是吗?

标签: android add-on


【解决方案1】:

使用 PackageManager,您可以查询系统上所有已安装包(APK)中的活动/等。 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
}

清单sn-p:

    <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 标记将确保只有属于映像的一部分或使用与主应用相同的密钥签名的 APK 才能被授予该权限。

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

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

【讨论】:

  • 很高兴帮助了某人 :) 如果您有问题或改进,请告诉我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 2021-11-26
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多