• Android-NDK编译


    (2013-12-19  21:48:21 其实一切还是先看看官网的好,乱百度浪费时间....

    http://developer.android.com/tools/sdk/ndk/index.html#Installing  )

    (开始..这个文章只有最后的总结算笔记,其他废话)

    话说移动设备交叉编译还真是麻烦....

    看cocos2d-x 环境搭建 ,基本上都是推荐安装 cygwin.

    因为两年前的幼稚经验,对这个东西实在是心里畏惧,加上偶尔交叉编译点东西都是用MingW,就进行了以下尝试:

    1.  给MinGW环境变量加上NDK路径

          找到MinGW安装目录下的  /etc/profile 

      在最后加上这么一句: 

      export PATH="/e/T_GIT/android_dep/android-ndk-r8e:$PATH"
    

         MinGW访问驱动器用 “/” 开头,并且没有“:” 。对应的实际路径是 :E:T_GITandroid_depandroid-ndk-r8e

         在MinGW环境下输入命令进行验证:

    ezhong@bj-ezhong ~
    $ ndk-build
    Android NDK: Could not find application project directory !
    Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
    /e/T_GIT/android_dep/android-ndk-r8e/build/core/build-local.mk:130: *** Android
    NDK: Aborting    .  Stop.
    
    ezhong@bj-ezhong ~
    

         这样就证明MinGW的NDK环境变量配置好了.

    2.   编译NDK sample :hello-jni

         从 E:T_GITandroid_depandroid-ndk-r8esamples 下拷贝 hello-jni到任意目录

         比如我的是 E:T_GITeclipsehello-jni

         MinGW中进入hello-jni目录,执行ndk-build 命令:

    ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni
    $ ls
    AndroidManifest.xml  default.properties  jni  res  src  tests
    
    ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni
    $ ndk-build
    Gdbserver      : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
    Gdbsetup       : libs/armeabi/gdb.setup
    Cygwin         : Generating dependency file converter script
    Compile thumb  : hello-jni <= hello-jni.c
    SharedLibrary  : libhello-jni.so
    Install        : libhello-jni.so => libs/armeabi/libhello-jni.so
    
    ezhong@bj-ezhong /e/T_GIT/eclipse/hello-jni
    

         hello-jni目录下多了libs 、obj 两个文件夹.

         libs下有生成的so文件

    3  编译错误

        将jni文件拷贝到一个eclipse生成的android项目下,再次调用ndk-build的时候出现如下错误

    ezhong@bj-ezhong /e/T_GIT/eclipse/andTest1
    $ ndk-build
    Invalid attribute name:
        package
    /e/T_GIT/android_dep/android-ndk-r8e/build/gmsl/__gmsl:512: *** non-numeric seco
    nd argument to `wordlist' function: ''.  Stop.
    
    ezhong@bj-ezhong /e/T_GIT/eclipse/andTest1
    $
    

      查了些资料,竟然有的这样的解决方法:

      http://blog.csdn.net/devilkin64/article/details/9144355

    解决方法:
    找到NDK中的这个__gmsl文件,并将其中第518行:
    int_encode = $(__gmsl_tr1)$(wordlist 1, ,$(__gmsl_input_int))修改为 
    int_encode = $(__gmsl_tr1)$(wordlist 1,$(words ),$(__gmsl_input_int))
    

      不理解啊...

          同样一份jni代码,放入一个工程就不行了?

          http://blog.csdn.net/jiuyueguang/article/details/9465305 有提示..原来是 AndroidManifest.xml 搞怪.

          去掉AndroidManifest.xml果然可以编译通过.

          看到各个大神们的 dos2unix 、fromdos  等转换工具 ,windows真是伤不起啊.

          最后搜到个很少办法的办法..先把 AndroidManifest.xml挪走或者改名,编译完再恢复...太高级了.

    总结:

      最激动人心的时刻到了....

         以上都是废话....

         NDK本身有提供windows的ndk-build脚本...

         只要将 安装目录 如“E:T_GITandroid_depandroid-ndk-r8e”  设置到windows系统环境变量PATH中.

         直接在CMD中,切入到目标目录,ndk-build即可....

    E:T_GITeclipseandTest1>ndk-build
    "Compile thumb : ejni <= ejni.c
    SharedLibrary  : libejni.so
    Install        : libejni.so => libs/armeabi/libejni.so
    
    E:T_GITeclipseandTest1>
    

      太容易把自己绕死...

       另: javah 找不到 android.app.Activity 用 

      -bootclasspath E:T_GITandroid_depadt-bundle-windows-x86-20130717sdkplatformsandroid-17android.jar 

      参数指定,貌似与直接用src下的 Java文件生成的差不多..

       

  • 相关阅读:
    SQL-W3School-高级:SQL ALIAS(别名)
    SQL-W3School-高级:SQL BETWEEN 操作符
    SQL-W3School-高级:SQL IN 操作符
    SQL-W3School-高级:SQL 通配符
    C语言实现定积分求解方法
    android使用webview上传文件(支持相册和拍照)
    POJ2349+Prim
    nyist 740 “炫舞家“ST(动态规划)
    paip.php eclipse output echo 乱码
    Deep Learning论文笔记之(八)Deep Learning最新综述
  • 原文地址:https://www.cnblogs.com/ezhong/p/3480380.html
Copyright © 2020-2023  润新知