Skip to content

Commit 9efdbcd

Browse files
authored
Merge branch 'dev' into master
2 parents 22dd493 + 73bd871 commit 9efdbcd

File tree

21 files changed

+200
-101
lines changed

21 files changed

+200
-101
lines changed

CoreLibrary/src/main/java/com/didi/virtualapk/internal/ComponentsHandler.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
import com.didi.virtualapk.PluginManager;
3131

32+
import java.util.ArrayList;
33+
import java.util.Set;
3234
import java.util.concurrent.atomic.AtomicInteger;
3335

3436
/**
@@ -79,9 +81,14 @@ public void markIntentIfNeeded(Intent intent) {
7981
String targetClassName = intent.getComponent().getClassName();
8082
// search map and return specific launchmode stub activity
8183
if (!targetPackageName.equals(mContext.getPackageName()) && mPluginManager.getLoadedPlugin(targetPackageName) != null) {
82-
intent.putExtra(Constants.KEY_IS_PLUGIN, true);
83-
intent.putExtra(Constants.KEY_TARGET_PACKAGE, targetPackageName);
84-
intent.putExtra(Constants.KEY_TARGET_ACTIVITY, targetClassName);
84+
// mark plugin by categories
85+
Set<String> categories = intent.getCategories();
86+
if (categories != null) {
87+
intent.putStringArrayListExtra(Constants.KEY_CATEGORY, new ArrayList<>(categories));
88+
categories.clear();
89+
}
90+
intent.addCategory(Constants.CATEGORY_PREFIX_TARGET_PACKAGE + targetPackageName);
91+
intent.addCategory(Constants.CATEGORY_PREFIX_TARGET_ACTIVITY + targetClassName);
8592
dispatchStubActivity(intent);
8693
}
8794
}

CoreLibrary/src/main/java/com/didi/virtualapk/internal/Constants.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,14 @@
2020
* Created by renyugang on 16/8/15.
2121
*/
2222
public class Constants {
23-
public static final String KEY_IS_PLUGIN = "isPlugin";
24-
public static final String KEY_TARGET_PACKAGE = "target.package";
25-
public static final String KEY_TARGET_ACTIVITY = "target.activity";
23+
public static final String KEY_CATEGORY = "va.intent.extra.category";
24+
public static final String CATEGORY_PREFIX = "va.intent.category.";
25+
public static final String CATEGORY_PREFIX_TARGET_PACKAGE = CATEGORY_PREFIX + "package.";
26+
public static final String CATEGORY_PREFIX_TARGET_ACTIVITY = CATEGORY_PREFIX + "activity.";
27+
28+
// public static final String KEY_IS_PLUGIN = "isPlugin";
29+
// public static final String KEY_TARGET_PACKAGE = "target.package";
30+
// public static final String KEY_TARGET_ACTIVITY = "target.activity";
2631

2732
public static final String OPTIMIZE_DIR = "dex";
2833
public static final String NATIVE_DIR = "valibs";

CoreLibrary/src/main/java/com/didi/virtualapk/internal/VAInstrumentation.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ protected void injectActivity(Activity activity) {
184184
ComponentName component = PluginUtil.getComponent(intent);
185185
Intent wrapperIntent = new Intent(intent);
186186
wrapperIntent.setClassName(component.getPackageName(), component.getClassName());
187+
wrapperIntent.setExtrasClassLoader(activity.getClassLoader());
187188
activity.setIntent(wrapperIntent);
188189

189190
} catch (Exception e) {
@@ -200,7 +201,7 @@ public boolean handleMessage(Message msg) {
200201
try {
201202
Reflector reflector = Reflector.with(r);
202203
Intent intent = reflector.field("intent").get();
203-
intent.setExtrasClassLoader(mPluginManager.getHostContext().getClassLoader());
204+
// intent.setExtrasClassLoader(mPluginManager.getHostContext().getClassLoader());
204205
ActivityInfo activityInfo = reflector.field("activityInfo").get();
205206

206207
if (PluginUtil.isIntentFromPlugin(intent)) {

CoreLibrary/src/main/java/com/didi/virtualapk/internal/utils/PluginUtil.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,37 @@ public static ComponentName getComponent(Intent intent) {
5959
return null;
6060
}
6161
if (isIntentFromPlugin(intent)) {
62-
return new ComponentName(intent.getStringExtra(Constants.KEY_TARGET_PACKAGE),
63-
intent.getStringExtra(Constants.KEY_TARGET_ACTIVITY));
62+
String pkg = null;
63+
String activity = null;
64+
for (String cat : intent.getCategories()) {
65+
if (cat.startsWith(Constants.CATEGORY_PREFIX_TARGET_PACKAGE)) {
66+
pkg = cat.substring(Constants.CATEGORY_PREFIX_TARGET_PACKAGE.length());
67+
continue;
68+
}
69+
70+
if (cat.startsWith(Constants.CATEGORY_PREFIX_TARGET_ACTIVITY)) {
71+
activity = cat.substring(Constants.CATEGORY_PREFIX_TARGET_ACTIVITY.length());
72+
continue;
73+
}
74+
}
75+
return new ComponentName(pkg, activity);
6476
}
6577

6678
return intent.getComponent();
6779
}
6880

6981
public static boolean isIntentFromPlugin(Intent intent) {
70-
if (intent == null) {
82+
if (intent == null || intent.getCategories() == null) {
7183
return false;
7284
}
73-
return intent.getBooleanExtra(Constants.KEY_IS_PLUGIN, false);
85+
86+
for (String cat : intent.getCategories()) {
87+
if (cat.startsWith(Constants.CATEGORY_PREFIX)) {
88+
return true;
89+
}
90+
}
91+
92+
return false;
7493
}
7594

7695
public static int getTheme(Context context, Intent intent) {

CoreLibrary/upload.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def gitUrl = 'https://github.com/didi/VirtualAPK' // Git仓库的url
1111
group = GROUP_ID
1212
archivesBaseName = 'core'
1313

14-
version = "0.9.8"
14+
version = "0.9.9.1-dev"
1515

1616

1717
install {

PluginDemo/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ dependencies {
5454
// the following aars are also compiled in host project, so they will be filterd when build plugin apk.
5555
// but, wo can still visit their Class and Resources.
5656
implementation 'com.android.support:appcompat-v7:23.4.0'
57-
// implementation 'com.didi.virtualapk:core:0.9.8'
57+
implementation 'com.didi.virtualapk:0.9.9.1-dev'
5858
}
5959

6060
apply plugin: 'com.didi.virtualapk.plugin'

PluginDemo/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ buildscript {
66
}
77
dependencies {
88
classpath 'com.android.tools.build:gradle:3.0.0'
9-
classpath 'com.didi.virtualapk:gradle:0.9.8.6'
9+
classpath 'com.didi.virtualapk:gradle:0.9.8.6.2-dev'
1010
}
1111
}
1212

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ dependencies {
4949
testImplementation 'junit:junit:4.12'
5050

5151
implementation 'com.android.support:appcompat-v7:23.4.0'
52-
implementation 'com.didi.virtualapk:core:0.9.8'
52+
implementation 'com.didi.virtualapk:core:0.9.9.1-dev'
5353
// implementation project (':CoreLibrary')
5454

5555
}

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ buildscript {
77
}
88
dependencies {
99
classpath 'com.android.tools.build:gradle:3.0.0'
10-
classpath 'com.didi.virtualapk:gradle:0.9.8.6'
10+
classpath 'com.didi.virtualapk:gradle:0.9.8.6.2-dev'
1111

1212
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
1313
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
GROUP_ID=com.didi.virtualapk
22
ARTIFACT_ID=gradle
3-
VERSION=0.9.8.6
3+
VERSION=0.9.8.6.2-dev

0 commit comments

Comments
 (0)