先上效果图
项目结构:
app:宿主apk
plugin:插件apk
standard:标准,插件activity创建时候需要实现里面的接口
1、创建标准
/**
* activity标准接口
*/
public interface ActivityInterface {
/**
* 把宿主的环境给 插件
* @param activity
*/
void insertAppActivity(Activity activity);
void onCreate(Bundle savedInstanceState);
void onResume() ;
void onStart();
void onDestroy();
}
2、创建插件apk
tips:其中activity在插件中无需注册
创建BaseActivity,实现ActivityInterface
public class BaseActivity extends Activity implements ActivityInterface {
//宿主环境,因为插件未安装是没有上下文的
public Activity activity;
@Override
public void insertAppActivity(Activity activity) {
this.activity = activity;
}
@SuppressLint("MissingSuperCall")
@Override
public void onCreate(Bundle savedInstanceState) {
}
@SuppressLint("MissingSuperCall")
@Override
public void onResume() {
}
@SuppressLint("MissingSuperCall")
@Override
public void onStart() {
}
@SuppressLint("MissingSuperCall")
@Override
public void onDestroy() {
}
public void setContentView(int layoutResID) {
activity.setContentView(layoutResID);
}
public <T extends View> T findViewById(int id) {
return activity.findViewById(id);
}
@Override
public void startActivity(Intent intent) {
Intent intentNew = new Intent();
intentNew.putExtra("className",intent.getComponent().getClassName());
activity.startActivity(intentNew);
}
}
创建PluginActivity
public class PluginActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_plugin);
// this 会报错,因为插件没有安装,也没有组件的环境,所以必须使用宿主环境
Toast.makeText(activity, "我是插件", Toast.LENGTH_SHORT).show();
findViewById(R.id.bt_start_activity).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(activity, TestActivity.class));
}
});
}
}
布局文件:
<?xml version=