安卓插件(安卓应用插件化)

安卓应用插件化:

为了减小安卓应用单个包的大小,方便应用功能的动态更新、变动,需要对应用进行分解。

将一个功能众多的应用分解为: 一个主应用外壳 + n个功能插件

(1)主应用外壳提供给用户安装,在使用时可根据用户操作加载插件,执行特定功能。

(2)功能插件可在应用发布后,动态变动更新(而无需重装应用。留存用户、动态修改功能)

支付宝、微信等都是插件化的应用。


应用插件化示例:(扫码安装)

 


应用插件化简易实现:

根据插件原理将apk拆解为,apk应用壳 + n个功能apk插件

(1)apk插件制作:

1、在libs中,添加BaseActivity.jar (下载
2、修改应用内所有Activity继承自BaseActivity
3、生成插件:编译生成apk,即可作为插件使用(是独立应用,也是插件)

/** 插件应用主Activity */
// public class MainActivity extends Ativity 
public class MainActivity extends BaseActivity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	...
	.
	.
}

(2)apk主应用壳制作: (从应用壳中启动任意插件)
1、在libs中,添加EmptyActivity.jar (下载
2、Manifest.xml中,添加<activity android:name="sci.apk.plugin.EmptyActivity" />
3、启动插件:EmptyActivity.ShowPlugin(this, apkPath);


public class MainActivity extends Activity
{
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.empty_activity_main);
	}
	
	public void OpenPlugin(View view)
	{
		String apkPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/backups/apps/AndroidPlugin_plugin1.apk";
		if(!new File(apkPath).exists()) Toast.makeText(this, "插件不存在!", Toast.LENGTH_SHORT).show();
		else
		{
			EmptyActivity.ShowPlugin(this, apkPath);								// 启动插件
	//		EmptyActivity.Show(this, apkPath, "com.ltsdk.showdebug.MainActivity");	// 通过EmptyActivity执行插件apk指定Activity的功能
		}
	}
}

<application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:icon="@drawable/empty_ic_launcher" >
        
        <activity
            android:name="com.app.empty_shell.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- 通过EmptyActivity展示任意插件Activity -->
        <activity android:name="sci.apk.plugin.EmptyActivity" />
        
</application>

应用插件化实现原理:

1、在apk主应用壳中,提供一个空壳 EmptyActivity,用于展示插件中的界面。该Activity封装了Activity的生命周期函数,根据传入的Activity参数信息,去插件apk中加载对应的类、资源等,提取插件逻辑在EmptyActivity中进行展示和执行。

2、插件apk,为了能在壳应用中展示,需要对所有的Activity功能逻辑进行统一的封装。BaseActivity是对功能逻辑进行插件化封装转接的类。

插件Activity继承自此BaseActivity,在需要资源和执行逻辑时,通过BaseActivity中提供的接口,转接至壳应用的EmptyActivity进行展示和执行;壳EmptyAcitivity在执行生命周期函数以及其它函数逻辑更新时。通过反射获取BaseActivity中的函数接口,执行逻辑。

示例源码下载

猜你喜欢

转载自blog.csdn.net/scimence/article/details/88572340