0
点赞
收藏
分享

微信扫一扫

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  进来到这里 勾选 下面三项 并且下载


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

下面这一步  是在~~~~~~主!!!!!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中调用


为什么我要把顺序写的不对


因为 这是我走错的路..................你们不跟着看一看嘛?









举报

相关推荐

0 条评论