Skip to content

Commit c226842

Browse files
Merge pull request #54 from dart-native/feature/android_string
Feature/android string
2 parents 8f1a16a + 05dcbc2 commit c226842

File tree

27 files changed

+1037
-580
lines changed

27 files changed

+1037
-580
lines changed

dart_native/android/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ add_library( # Specifies the name of the library.
1818

1919
# Provides a relative path to your source file(s).
2020
src/main/jni/include/dart_api_dl.c
21-
src/main/jni/dart_native.cpp )
21+
src/main/jni/dart_native.cpp
22+
src/main/jni/dn_type_convert.cpp
23+
src/main/jni/dn_method_call.cpp
24+
src/main/jni/dn_signature_helper.cpp
25+
src/main/jni/dn_callback.cpp)
2226

2327
find_library( # Sets the name of the path variable.
2428
log-lib

dart_native/android/src/main/java/com/dartnative/dart_native/CallbackInvocationHandler.java

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,33 @@
1212
public class CallbackInvocationHandler implements InvocationHandler {
1313
private static final String TAG = "CallbackHandler";
1414

15-
private static HashMap<Class<?>, String> sTypeConvert = new HashMap<Class<?>, String>() {{
16-
put(int.class, "I");
17-
put(float.class, "F");
18-
put(double.class, "D");
19-
put(boolean.class, "Z");
20-
put(String.class, "Ljava/lang/String;");
15+
private static final HashMap<String, String> sBasicTypeConvert = new HashMap<String, String>() {{
16+
put("int", "java.lang.Integer");
17+
put("float", "java.lang.Float");
18+
put("double", "java.lang.Double");
19+
put("boolean", "java.lang.Boolean");
20+
put("byte", "java.lang.Byte");
21+
put("short", "java.lang.Short");
22+
put("long", "java.lang.Long");
23+
put("char", "java.lang.Character");
2124
}};
2225

2326
@Override
2427
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
2528
Log.d(TAG, "invoke method: " + method.getName());
26-
Class<?>[] paramTypes = method.getParameterTypes();
27-
String[] params = new String[paramTypes.length];
28-
for (int i = 0; i < paramTypes.length; i++) {
29-
params[i] = sTypeConvert.get(paramTypes[i]);
29+
int argumentLength = args == null ? 0 : args.length;
30+
String[] paramsType = new String[argumentLength];
31+
for (int i = 0; i < argumentLength; i++) {
32+
paramsType[i] = args[i] != null ? args[i].getClass().getName() : null;
3033
}
34+
3135
String funName = method.getName();
32-
String returnType = sTypeConvert.get(method.getReturnType());
33-
long dartObjectAddr = CallbackManager.getInstance().getRegisterDartAddr(proxy);
34-
return hookCallback(dartObjectAddr, funName, paramTypes.length, params, args, returnType);
36+
String returnType = method.getReturnType().getName();
37+
returnType = sBasicTypeConvert.get(returnType) == null ? returnType : sBasicTypeConvert.get(returnType);
38+
long dartObjectAddress = CallbackManager.getInstance().getRegisterDartAddr(proxy);
39+
40+
return hookCallback(dartObjectAddress, funName, argumentLength, paramsType, args, returnType);
3541
}
3642

37-
static native Object hookCallback(long dartObjectAddr, String funName, int argCount, String[] argTypes, Object[] args, String returnType);
43+
static native Object hookCallback(long dartObjectAddress, String funName, int argCount, String[] argTypes, Object[] args, String returnType);
3844
}

0 commit comments

Comments
 (0)