你是小白么 是的话开始看吧
你是高手就不用看了 因为 不是给你写的 滚滚滚 一边玩去
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中调用
为什么我要把顺序写的不对
因为 这是我走错的路..................你们不跟着看一看嘛?