我正在使用 aCustomPainter在 Flutter 中绘制如下:
@override
void paint(Canvas canvas, Size size) {
canvas.drawRect(...);
canvas.drawImage(...);
...
}
Run Code Online (Sandbox Code Playgroud)
如何绘制Icon的canvas?
我创建了两个Native C ++项目-一个使用Kotlin作为基本语言,另一个使用Java。
在这两个项目中,我对自动创建的C ++函数进行了相同的修改:
extern "C" JNIEXPORT jstring JNICALL
Java_com_stellarsolvers_test_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */,
jstring s) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
Run Code Online (Sandbox Code Playgroud)
因此,我添加了参数:jstring s。
还可以通过以下方式修改定义:
科特林:
external fun stringFromJNI(s: String): String
Run Code Online (Sandbox Code Playgroud)
Java:
public native String stringFromJNI(String s);
Run Code Online (Sandbox Code Playgroud)
在调用代码中,我为此函数提供了一个字符串值:
科特林:
sample_text.text = stringFromJNI("Kotlin")
Run Code Online (Sandbox Code Playgroud)
Java:
tv.setText(stringFromJNI("Java"));
Run Code Online (Sandbox Code Playgroud)
两个项目都没有其他更改。
这两个项目均来自“ Native C ++”模板
“创建新项目”向导中的单个更改是:
我希望两个项目都能正常工作。
使用Java就是这种情况。
但是,Kotlin应用程序的行为方式却很奇怪:当执行到达应调用C ++函数的位置时,程序将在调试器中使用SIGSEGV崩溃: