zoukankan      html  css  js  c++  java
  • 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文件生成的差不多..

       

  • 相关阅读:
    JDBC 复习4 批量执行SQL
    JDBC 复习3 存取Oracle大数据 clob blob
    Oracle复习
    Linux命令(1)grep
    JDBC 复习2 存取mysql 大数据
    JDBC 复习1 DBUtil
    php 环境搭建问题
    Windows 批处理 bat 开启 WiFi 菜单选项 设置ID PWD
    Bat 批处理启动和停止Oracle 服务
    docker 学习1 WSL docker ,Windows docker
  • 原文地址:https://www.cnblogs.com/ezhong/p/3480380.html
Copyright © 2011-2022 走看看