• windows android studio 编译Jni动态库


    项目需要,折腾了半天搞定windows android studio环境编译Jni动态库,现记录下来。

    准备安装环境:

     1. android studio 下载地址是http://www.android-studio.org/index.php/component/content/category/88-download,我用的版本是1.5.1

     2.android ndk  下载地址:http://wear.techbrood.com/tools/sdk/ndk/ 我用的版本是android-ndk-r10d. ndk 不用安装,可放在任意目录,后面会有

       地方指向这个目录。

    3.cygwin 下载地址https://www.cygwin.com/,我用的版本是64位的,cygwin安装不在本博客范围。

    安装好环境后开始一个简单的Demo

    1.新建一个project,选择Empty Activity.

    2.创建一个Class 名称为TestA。

    TestA创建好以后添加如下代码:

    public class TestA {
        static{
            System.loadLibrary("test");
        }
        public  native int testAdd(int a, int b);
    }

    3. 执行编译操作:

        编译通过后将在appuildintermediatesclassesdebugcn etshuihanmyapplication目录下产生文件TestA.class

    4.产生Jni头文件:

       通过Alt +F12打开terminal窗口,在命令行输入cd app/src/main.

     接着在命令行中执行

    javah -d jni -classpath C:UsersJustinAppDataLocalAndroidsdkplatformsandroid-23android.jar;....uildintermediatesclassesdebug cn.net.shuihan.myapplication.TestA

    如果出现以下错误  class MainActivity extends AppCompatActivity 替换成 class MainActivity extends Activity 再重复操作。

    如果没有出现错误提示信息,会在Jni文件夹下产生头文件5. 添加源文件.c或者cpp都可以,文件名称自定义没有限制,将产生的头文件包含进去,并实现头文件内的接口方法。源文件中的代码如下:

    #include "cn_net_shuihan_myapplication_TestA.h"
    JNIEXPORT jint JNICALL Java_cn_net_shuihan_myapplication_TestA_testAdd
            (JNIEnv *para1, jobject para2, jint a, jint b)
    {
       return a + b;
    }

    6.编译文件:执行编译操作,会发下编译不通过,有以下错误提示。ndk环境需要配置,至今还没有配。

    7.配置ndk:在gradle.properties中添加 android.useDeprecatedNdk=true,local.properties中添加

                   ndk.dir=D:\wgg\ffmpeg-project\android-ndk-r10d,module:app下面的 build.gradle中添加

      ndk {
                moduleName "test"
                ldLibs "log", "z", "m"
    abiFilters "armeabi" }

    8.生成动态库:重新编译程序,出现以下错误,这是windows android studio的一个bug,任意添加一个空.c文件,再次编译就没有问题了。输出的so文件在appuildintermediates dkdebuglibarmeabi目录下,名称为libtest.so。

     如果按照方法编译不成功 可以加入QQ群127903734进行交流。

    make.exe: *** No rule to make target `D:wggffmpeg-projectandroid-ndkMyApplication2appuildintermediates
    dkdebugobj/local/armeabi/objs/zuozuoutil/D_wggffmpeg-projectandroid-ndkMyApplication2appsrcmainjni', needed by `D:wggffmpeg-projectandroid-ndkMyApplication2appuildintermediates
    dkdebugobj/local/armeabi/objs/zuozuoutil/D_wggffmpeg-projectandroid-ndkMyApplication2appsrcmainjnicn_net_shuihan_myapplication_TestA.o'.  Stop.
    
    
     FAILED
    
    FAILURE: Build failed with an exception.
    
    * What went wrong:
    Execution failed for task ':app:compileDebugNdk'.
    > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:wggffmpeg-projectandroid-ndk-r10d
    dk-build.cmd'' finished with non-zero exit value 2
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
    
    BUILD FAILED
  • 相关阅读:
    源码探索笔记:ArrayList和LinkedList的源码
    Java多线程学习总结:初窥门径
    设计模式学习总结:责任链模式
    踩坑日记:行之Blog微信小程序开发过程中碰到的问题及处理方案(持续更新...)
    初识设计模式之模板方法模式
    初识设计模式之装饰者模式
    初识设计模式之建造者模式
    初识设计模式之适配器模式
    初始设计模式之原型模式
    初识设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/wanggang123/p/5673578.html
Copyright © 2020-2023  润新知