<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android Studio 中關于NDK編譯及jni header生成的問題

      之前由于工作原因使用grails這個基于groovy的框架做項目,對groovy感覺很好。

      基于groovygradle構建系統(tǒng)對我而言自然也是好的沒得說。

      Android Studio 正式版出來沒多久,不完善的地方自然很多,對于從eclipse轉來的伙伴們而言,不了解groovy的話對于gradle android的dsl自然是一頭霧水,其實groovy蠻好,花點時間學學,目前已經(jīng)支持android開發(fā)了。

      最近干的活設計到NDK開發(fā),在編譯時遇到一些不好搞定的問題。

      gradle 的NDK編譯

      使用gradle編譯ndk后會發(fā)現(xiàn),gradle其實是自己按dsl生成了android.mk,然后執(zhí)行ndk-build命令,仔細對比會發(fā)現(xiàn),它沒有生成application.mk。那么問題來了,對于我的項目而言,使用gradle總是編譯不過去,而自己運行ndk-build則不會出現(xiàn)問題。

      構建系統(tǒng)本來就是解決了這種批處理問題,不想拋開gradle而手動去編譯,干脆就讓gradle執(zhí)行自己的ndkbuild Task。

      通過不斷試錯,整理如下Task:

      // 編譯NDK代碼
      task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
      
          // android.mk 地址 ,自行更改
          def androidMK = "$projectDir/src/main/jni/Android.mk"
          // application.mk 地址, 自行更改
          def applicationMK = "$projectDir/src/main/jni/Application.mk"
      
          def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
      
          def cmd = ["$ndkDir/ndk-build", "NDK_PROJECT_PATH=$buildDir",
              "APP_BUILD_SCRIPT=$androidMK", "NDK_APPLICATION_MK=$applicationMK"]
      
          commandLine cmd
      }
      
      // 打包native庫, 會在編譯java代碼后執(zhí)行
      task ndkLibsToJar(type: Zip, dependsOn: ["compileDebugJava", ndkBuild],
              description: 'Create a JAR file of the native libs') {
      
          destinationDir new File(projectDir, 'libs')
          baseName 'ndk-libs'
          extension 'jar'
          from(new File(buildDir, 'libs')) { include '**/*.so' }
          into 'lib/'
      }
      
      
      dependencies {
          compile fileTree(dir: new File(projectDir, 'libs'), include: ['*.jar'])
      }
      
      

      當然,首先要確保項目根目錄下 local.properties 中有ndk的目錄位置的設定 ndk.dir=/YOUR_NDK_FOLDER

      生成JNI頭文件

      本來javah的參數(shù)就麻煩,有其實classpath的設定,還得指定包名,很是麻煩,如果包含native聲明方法的類中包含了android庫,不指定好android.jar就更麻煩。

      
      // 生成jni頭文件,在編譯java后運行
      task generateJNI(dependsOn: "compileDebugJava",
              description: 'Create jni header'){
      
          //要生成的類名, 可以多個
          def classes = ["org.jcuraengine.JCuraEngine"]
          //jni生成到哪里
          def destdir = "$projectDir/src/main/jni/jcuraengine"
      
      
          // 獲取android jar
          def rootDir = project.rootDir
          def localProperties = new File(rootDir, "local.properties")
          Properties properties = new Properties()
          localProperties.withInputStream { instr ->
              properties.load(instr)
          }
          def sdkDir = properties.getProperty('sdk.dir')
          def androidJarPath = sdkDir + "/platforms/" + android.compileSdkVersion + "/android.jar"
      
      
          def classesName = ""
          classes.each{
              classesName += " $it"
          }
      
          // 調用 javah
          try {
              // exec會出現(xiàn)錯誤,這里使用ant
              // 第一次運行這個task時,會出現(xiàn)錯誤,是android studio導致的,運行兩次既可,忽視第一次執(zhí)行時的異常
              // 當然,注意觀察第一次的異常,確保不是代碼自身問題。
              ant.javah(class: classesName, destdir: destdir, classpath:"$androidJarPath:$buildDir/intermediates/classes/debug/")
          } catch (def e) {
              println e
          }
      
      }
      

      這兩個task,在android stuido右側gradle tasks版面中會自動添加的。

      posted on 2015-01-30 17:16  黑暗伯爵  閱讀(2251)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 欧美疯狂xxxxbbbb喷潮| 亚洲日本中文字幕乱码中文| 无遮挡高潮国产免费观看| 精品国产人妻一区二区三区久久 | 国产尤物精品自在拍视频首页| 免费一区二三区三区蜜桃| 国产精品美女黑丝流水| 在线看国产精品自拍内射| 久久久www免费人成精品| 亚洲欧洲一区二区天堂久久| 性奴sm虐辱暴力视频网站 | 18无码粉嫩小泬无套在线观看 | 亚洲欧美国产日韩天堂区| 日本亲近相奷中文字幕| 久久久久久久久18禁秘| 婷婷综合久久狠狠色成人网| 国产日韩综合av在线| 午夜精品一区二区三区免费视频| 久久精品免费自拍视频| 成人网站免费观看永久视频下载| 天堂中文8资源在线8| 久青草国产在视频在线观看| 毛片亚洲AV无码精品国产午夜| 国产精品免费看久久久| 性欧美vr高清极品| 久久99久久99精品免视看国产成人| 一级片免费网站| 女人与牲口性恔配视频免费| 九九热免费精品在线视频| 国产日产亚洲系列av| 国产免费视频一区二区| 日韩高清在线亚洲专区不卡| 国产成人8X人网站视频| 亚洲欧美高清在线精品一区二区| 国产一区国产精品自拍| 国产不卡一区二区在线视频| 成人无码潮喷在线观看| 深夜av在线免费观看| 美日韩精品一区三区二区| 通城县| 91久久天天躁狠狠躁夜夜|