1.android studio 先生成代码后检测,避免找不到指定类
在android studio中有可能需要删除生成代码重新生成,运行时原有的代码提示不能找的指定类,不能正常运行。能不能先生成代码后检测,是可以的。
编辑app的build.gradle,添加如下配置
project.afterEvaluate {
javaPreCompileDebug.dependsOn externalNativeBuildDebug
}
2.从原生代码调用java
(1)创建类
A.h
extern int getuid();
class MyAsync {
public:
MyAsync() {
}
virtual ~ MyAsync() {
}
void get() {
onUid(getuid());
}
virtual void onUid(int uid) {
}
};
A.cpp
#include "A.h"
int getuid() {
return 3000;
}
(2)启用directors
SWIG用directors特征提供对交叉语言多态性的支持。为在原生代码调用java来做准备。
/*模块名see*/
%module(directors = 1) See;
/*为类MyAsync中的虚拟方法生成导向器*/
%feature("director") MyAsync;
//将自定义的代码包含在生成的文件中,例如编译生成的代码所需的头文件
%{
#include "A.h"
#include "A.cpp"
%}
%include "A.h"
(3)重写回调方法
在java中创建类并继承MyAsync
public class JavaAsync extends com.example.ndk2.jni.MyAsync {
private final TextView textView;
public JavaAsync(TextView textView) {
this.textView = textView;
}
@Override
public void onUid(int uid) {
textView.setText(uid + "");
}
}
(4)使用
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.sample_text);
JavaAsync javaAsync = new JavaAsync(tv);
javaAsync.get();
}
(5)效果