android studio调用c文件-小白版本

你是小白么 是的话开始看吧

你是高手就不用看了 因为 不是给你写的 滚滚滚 一边玩去


1  首先  开始只有一条狗 装备全靠捡


...准备好你的.cpp文件  和.h文件


UDPAPI.cpp   udpapi.h


   这个地方介绍一下android.mk

当然 我啥也不懂 只能贴代码

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:=udpapi
LOCAL_SRC_FILES:=UDPAPI.cpp

include $(BUILD_SHARED_LIBRARY)




2准备的这3个文件 放在    android studio       project视图下面  src main jni目录下

下面搭建 ndk 开发环境

    alt+ctrl+s 进入设置界面 然后 输入sdk  进来到这里 勾选 下面三项 并且下载



下面这一步  是在~~~~~~主!!!!!Project的gradle.properties  下面添加  

android.useDeprecatedNdk=true
同步一下
检测是否关联完毕 就查看 主local.properties

如果是这个样子

 

ndk.dir=C\:\\Users\\liuan\\AppData\\Local\\Android\\Sdk\\ndk-bundle
sdk.dir=C\:\\Users\\liuan\\AppData\\Local\\Android\\Sdk
那就是木有问题

如果不是

请把鼠标移动到你的model名字上面 按下f4  然后 点击左上角  sdk Location  


然后观察您的ndk location  是不是对的 我的是C:\Users\liuan\AppData\Local\Android\Sdk\ndk-bundle



好啦好啦 

下一步配置环境变量 

就是把C:\Users\liuan\AppData\Local\Android\Sdk\ndk-bundle加到path里 环境变量不会配置的话 ...你不会是妹子吧....加个qq呗..

配置好了的话

下一步

本 model下

android {
    compileSdkVersion 24
    buildToolsVersion '25.0.0'

    defaultConfig {
        ...
        versionCode 1
        versionName "1.0"
// add 1
        ndk {
            moduleName "libudpapi"
        }
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        ....//add 2
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }
    }

添加这两个东西


下一步

鼠标移动到 jni目录 右键点击一下 Show in Explorer

来到这个目录 找个空白的地方 按住shift 然后鼠标右键 在此处打开命令窗口

输入我们做梦都想输入的代码ndk-build回车

如果这个命令行 在你的libs 下面生成了很多东西 .so的那种 恭喜你 大概是成功了

[arm64-v8a] Compile++      : udpapi <= UDPAPI.cpp
[arm64-v8a] SharedLibrary  : libudpapi.so
[arm64-v8a] Install        : libudpapi.so => libs/arm64-v8a/libudpapi.so
[x86_64] Compile++      : udpapi <= UDPAPI.cpp
[x86_64] SharedLibrary  : libudpapi.so
[x86_64] Install        : libudpapi.so => libs/x86_64/libudpapi.so
[mips64] Compile++      : udpapi <= UDPAPI.cpp
[mips64] SharedLibrary  : libudpapi.so
[mips64] Install        : libudpapi.so => libs/mips64/libudpapi.so
[armeabi-v7a] Compile++ thumb: udpapi <= UDPAPI.cpp
[armeabi-v7a] SharedLibrary  : libudpapi.so
[armeabi-v7a] Install        : libudpapi.so => libs/armeabi-v7a/libudpapi.so
[armeabi] Compile++ thumb: udpapi <= UDPAPI.cpp
[armeabi] SharedLibrary  : libudpapi.so
[armeabi] Install        : libudpapi.so => libs/armeabi/libudpapi.so
[x86] Compile++      : udpapi <= UDPAPI.cpp
[x86] SharedLibrary  : libudpapi.so
[x86] Install        : libudpapi.so => libs/x86/libudpapi.so
[mips] Compile++      : udpapi <= UDPAPI.cpp
[mips] SharedLibrary  : libudpapi.so
[mips] Install        : libudpapi.so => libs/mips/libudpapi.so

下一步


生成本地方法 调用自己的c代码

package com.example.aaaa.utils;

public class JniTest {
    public native int init(int a);

    public native double getZhiJing(int ceAX, int ceBX, int ceAY, int ceBY, int windowHeight, int larseY, double YQGD);

    public native double getXiangsucha(int windowHeight, int larseY);

    public native double getJuLi(double jiaoju, double YQGD, double xiangsucha);

    public native int zAdd(int a, int b);

    static {
        System.loadLibrary("udpapi");
    }

    public static void main(String args[]) {

        JniTest jniTest = new JniTest();
        System.out.println("zAdd: " + jniTest.zAdd(1, 2));
        System.out.println("getZhiJing: " + jniTest.getZhiJing(1, 2, 3, 4, 4, 5, 7));
        System.out.println("getXiangsucha: " + jniTest.getXiangsucha(1, 2));
        System.out.println("getJuLi: " + jniTest.getJuLi(1, 2, 3));

    }
}  

这里的main方法是不会执行的....错误示范  

我为什么不删除呢  是因为想告诉大家  这个这个这个一定不要在java里面调用 在activity里面调用

pass:这个地方肯定以为已经成功了  当时我伸手就是一巴掌.......还远着呢 步骤我写的都是错的 你能做对 我服你


大家注意没  这个包名 我都贴出来了

下一步是 改.cpp文件的方法名称

用java开头 用方法名结尾

中间是这么干滴

Java_com_example_aaaa_utils_JniTest_zAdd

改完这一个 把其他的也改了
然后从新ndk-build
然后从activity中调用  
为什么我要把顺序写的不对  
因为 这是我走错的路..................你们不跟着看一看嘛?
 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值