NDK学习笔记(五)

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)效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值