android studio jni简单实例,适合新手(需要用到CMakeList文件)

首先感谢博主工匠若水的文章:

地址:http://blog.csdn.net/yanbober/article/details/45309049/


本人新手,如有错误,敬请指正。


初次使用android studio配置jni的时候,网上找了很多关于配置jni的博文,其中一篇就是工匠若水的博文,按照上面的步骤一步一步来,结果还是出现如下错误:

NT SERVICE\TrustedInstaller
Error:Execution failed for task ':app:compileDebugNdk'.
> Error: Your project contains C++ files but it is not using a supported native build system.
  Consider using CMake or ndk-build integration. For more information, go to:
   https://d.android.com/r/studio-ui/add-native-code.html
  Alternatively, you can use the experimental plugin:

研究了半天,发现可以配置CMakeList文件来解决这个错误。


具体步骤:

(PS:以下步骤跟上述博文的步骤有差异)


1.ndk不用特地下载,只要通过AndroidSDK下载就好。


2.打开Android Studio,新建一个项目,注意这里需要在第一个界面对Include C++ support打上勾,其他默认。



3.项目新建完成后,AS已经自动在app目录下新建一个native-lib.cpp,运行项目的时候就会调用文件内的Java_com_bin_cmakelist_MainActivity_stringFromJNI函数,在模拟器上显示"Hello from C++"。当然,这里我们要自己新建一个cpp文件。


4.新建一个JniUtils类,并写如下静态方法。helloFromC会报红字,先不管它

public class JniUtils {
    public static native String helloFromC();
}


5.标题栏:Build->Rebuild Project,编辑后的文件会在project视图下出现classes\debug文件下



6.点开AS的Terminal标签,通过cd命令进入到进入到该项目的app文件夹下

E:\androidproject\test\JniTest>cd app\build\intermediates\classes\debug
输入javah -jni 命令生成h文件
E:\androidproject\test\JniTest\app\build\intermediates\classes\debug>javah -jni com.bin.jnitest.JniUtil

执行完后可以在下JniTest\app\build\intermediates\classes\debug看见生成的 .h头文件



7.新建一个名为jni的文件夹,然后把刚才生成的.h头文件拷贝进刚创建的jni文件夹下。



8.在jin文件夹下创建Hello.cpp源文件(名字随意),内容如下:

#include "com_bin_jnitest_JniUtils.h"
JNIEXPORT jstring JNICALL Java_com_bin_jnitest_JniUtils_helloFromC
        (JNIEnv *env, jclass obj){
    return env->NewStringUTF("This just a test for Android Studio NDK JNI developer!");
}

#include "com_bin_jnitest_JniUtils.h"里引用的就是刚刚创建的头文件

函数名从头文件那里复制就好了


以上步骤与基本和引用博文一样,差异在下一步:

点开app下的CMakeList文件,在里面写上如下代码

add_library( # Sets the name of the library.
             Hello

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/jni/Hello.cpp )
第二行是生成的so名字,可以随意命名

最后一行是c++文件所在目录


最后,在MainActivity修改一下代码代码(蓝色字体是修改部分

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }
    static {
        System.loadLibrary("Hello");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);
        tv.setText(JniUtils.helloFromC());
//        tv.setText(stringFromJNI());
    }

输出结果如下



总结一下,其实也就是在原来博文的基础上就是对CMakeList加上一小段代码而已,代码也不是很难理解。而且我们并不需要像所引用博文一样,对gradle.properties,app/build.gradle和local.properties进行修改。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值