提交 254c9aac 编写于 作者: S superq_sky

Emergency solution: to avoid the stub activity not found error.

上级 0ae4d69f
......@@ -6,8 +6,9 @@
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application>
<activity android:exported="false" android:name="com.didi.virtualapk.delegate.StubActivity" android:launchMode="standard"/>
<!-- Stub Activities -->
<activity android:exported="false" android:name=".A$1" android:launchMode="standard"/>
<activity android:exported="false" android:name=".A$2" android:launchMode="standard"
......
package com.didi.virtualapk.delegate;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
/**
* Created by qiaopu on 2018/6/13.
*/
public class StubActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Go to the main activity
Intent mainIntent = getPackageManager().getLaunchIntentForPackage(getPackageName());
if (mainIntent == null) {
mainIntent = new Intent(Intent.ACTION_MAIN);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
mainIntent.setPackage(getPackageName());
ResolveInfo resolveInfo = getPackageManager().resolveActivity(mainIntent, 0);
if (resolveInfo != null) {
mainIntent.setClassName(this, resolveInfo.activityInfo.name);
}
}
startActivity(mainIntent);
finish();
}
}
......@@ -21,6 +21,7 @@ import android.app.Activity;
import android.app.Application;
import android.app.Fragment;
import android.app.Instrumentation;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
......@@ -34,6 +35,7 @@ import android.os.PersistableBundle;
import android.util.Log;
import com.didi.virtualapk.PluginManager;
import com.didi.virtualapk.delegate.StubActivity;
import com.didi.virtualapk.utils.PluginUtil;
import com.didi.virtualapk.utils.Reflector;
......@@ -113,7 +115,16 @@ public class VAInstrumentation extends Instrumentation implements Handler.Callba
LoadedPlugin plugin = this.mPluginManager.getLoadedPlugin(component);
if (plugin == null) {
return newActivity(mBase.newActivity(cl, className, intent));
// Not found then goto stub activity.
Context context = this.mPluginManager.getHostContext();
Boolean debugMode = Reflector.QuietReflector.on(context.getPackageName() + ".BuildConfig").field("DEBUG").get();
if (debugMode != null && debugMode) {
throw new ActivityNotFoundException("error intent: " + intent.toURI());
}
Log.i(TAG, "Not found. starting the stub activity: " + StubActivity.class);
return newActivity(mBase.newActivity(cl, StubActivity.class.getName(), intent));
}
Activity activity = mBase.newActivity(plugin.getClassLoader(), targetClassName, intent);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册