ndk android studio万年坑
先说javah万年坑
javah语法:
Usage:
javah [options] <classes>
where [options] include:
-o <file> Output file (only one of -d or -o may be used)
-d <dir> Output directory
-v -verbose Enable verbose output
-h --help -? Print this message
-version Print version information
-jni Generate JNI-style header file (default)
-force Always write output files
-classpath <path> Path from which to load classes
-bootclasspath <path> Path from which to load bootstrap classes
<classes> are specified with their fully qualified names
(for example, java.lang.Object).
在MainActivity中函数
先make project 生成 class文件,然后如下:
mac与windows下 javah的使用不尽相同:
注意HelloJni.class是个二进制文件,假设当前文件夹目录是aa 那么其下就是 com\example\hellojni\HelloJni.class的结构
在classpath 类路径下 编译 com.example.hellojni.HelloJni 变成 .h文件
windows下 (;)
javah -classpath .;F:\\aa\\android.jar -d jni com.example.hellojni.HelloJni
mac下(:)
javah -classpath .:/Users/wyj/Desktop/a/android.jar -d jj com.example.hellojni.HelloJni
否则就一直报错说找不到
写好Android.mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c include $(BUILD_SHARED_LIBRARY)
解决了javah之后,在命令提示符中切换到jni的上一级目录 输入命令ndk-build 编译出 *.so文件
在android studio中 把相应的 armeabi/*.so 文件结构
在main中建立 jniLibs文件夹 然后把 armeabi/*.so 拷贝进去 然后就可以访问了。
在 jniLibs.srcDirs = ['xxx'] //这里xxx代表一个目录。可以改变jniLibs的读取路径 , 默认的 jniLibs结构是 src/main/jniLibs
ndk生成的so文件 只能 给 具有该目录包结构的 *.java 用,放到其它工程中 包不对应则不能用。
例如:.c文件中的函数为
JNIEXPORT jstring JNICALL Java_com_example_wyj_myapplication_MainActivity_stringFromJNI 能够使用的类的结构 必须是 com.example.wyj.myapplication 文件包结构的 MainActivity类 下面的 stringFromJNI 函数才能被用
放入其它工程如果不是遵从这个结构的 会报错,函数找不到, 当然*.so可以加载。 使用的时候 在MainActivity.java中
public static native String stringFromJNI();
static {
System.loadLibrary("hello");
}
ndk android studio万年坑的更多相关文章
- Android SDK Android NDK Android Studio 官方下载地址
2016.12 Android Studio Windows Includes Android SDK https://dl.google.com/dl/android/studio/install/ ...
- Android SDK Android NDK Android Studio 官方下载地址<转>
转自:http://www.cnblogs.com/yaotong/archive/2011/01/25/1943615.html 2016.10Android Studio 2.2.1.0https ...
- Android Studio采坑记录
折腾了几个月的Android Studio,终于在今天被我搞定了 ( ̄▽ ̄)~* 开贴记录下,免得下次再次采坑 先说下我之前电脑的环境配置吧,sdk是几年前在网上下载别人整理出来的包,一直没有更新过 ...
- android studio 编译NDK android studio 生成.so文件
详细配置使用请移步:https://www.jianshu.com/p/4c7d9a10933b android studio NDK 编译 第一步: app/build.gradle下面 添加代码: ...
- Android Studio 首坑 Gradle sync failed: Cause: error in opening zip file 的错误
前言 今天安装Android studio 2.3.1时发生了一个错误,安装完成后创建第一个Hello World项目是报错.经过这个百度后,结果没有一个靠谱的.将拆解经过记录一下. 环境: 操作系统 ...
- [android ndk] -android studio中编译生成so文件
1.android.useDeprecatedNdk=true Error:Execution failed for task ':app:compileDebugNdk'.> Error: N ...
- Android Studio踩坑记
1. 模拟器在管理器中可以运行,但是点击run时死活找不到: 在sdk的/platform-tools/目录下找到adb.exe工具 打开cmd,输入下面两条命令 adb kill- ...
- Android Studio中JNI -- 1 -- 配置方法
1.配置NDK 1.1 下载NDK Android Studio 1.2 配 android-ndk-r10e,不同版本的Studio需要配置不同的ndk,下载完成后,随便解压放至某个文件目录下 1. ...
- Android Studio gradle配置详解
android gradle配置详解 AppExtension类及其属性 可能大部分人看到AppExtension类会感觉到非常的陌生,其实我们在app中的build.gradle中填写配置信息的时候 ...
随机推荐
- php中定义网站根目录的常用方法
define('BASE_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../')));
- 虚拟化之vmware-vcenter
VMware ESXi.VMware vCenter Server 和 vSphere Client,它们分别是 vSphere 的虚拟化层.管理层和接口层. vcenter server 插件和vc ...
- DIV的绝对居中
来源:http://www.cnblogs.com/damonlan/archive/2012/04/28/2473525.html 作者:浪迹天涯 很多时候,我们需要在浏览器中让一个div居中进行显 ...
- 关于IE10出现LinkButton点击无效的解决方案
关于IE10出现LinkButton点击无效的情况: 一般高配置的系统如Win7旗舰版SP1系统不会出现这种情况,针对家庭普通版和专业版的用户通过测试都有这种情况,对于开发人员要解决不同系统和IE的兼 ...
- replace() replace_copy()
int a[] = {1,2,3,3,4}; vector<int> v(a, a+5); vector<int> v2; //replace(v.begin(), v.end ...
- 安卓模拟器安装apk,上网
1.首先找到安装安卓模拟器的文件夹: 2.目录:D:\Java\Android-all\platform-tools 3.运行cmd命令:adb install D:\Java\Android-all ...
- nginx+tomcat+redis的集群+session共享
nginx+tomcat+redis的集群+session共享 环境准备 1.tomcat版本:tomcat7 tomcat下载及安装,目前很多好的资源和步骤,此处省略. 2.jdk版本:jdk1.7 ...
- 每天一个linux命令-转载
每天一个linux命令目录 转载自: http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 开始详细系统的学习linux常用命令 ...
- ajax语法
js语言功能比较强大,但不能访问数据库 ajax来补充这一缺陷 特点:输出不用刷新页面,条件查询数据显示页面上一般不用它,因为需要造很多表格不如用嵌入php代码方式简单 ajax语法: $.ajax( ...
- windows 系统中打开一个数字证书所经历的过程
今天在使用Outlook express调试CSP程序时,发现数字证书总是加载不上(提示该数字证书已经被破坏),使用断点进去跟踪一下,发现在CSP程序中调用CPVerifySignature ...