(原)使用android studio ndk開發流程

來源:互聯網
上載者:User

標籤:

先使用android stuido建立一個app工程,建立工程的時候,.gradle目錄結構下為2.8目錄.(note:2.10目錄為後續更新結果出現。)依次修改上述紅色方框標註部分內容:1)修改gradle/wrapper/gradle-wrapper.properties目錄內容: 2)修改工程目錄下的build.gradle,主要是修改gradle外掛程式這部分內容:  3)修改app/build_gradle內容:修改前原始內容:apply plugin: ‘com.android.application‘ android {    compileSdkVersion 24    buildToolsVersion "24.0.1"     defaultConfig {        applicationId "com.example.walkera.serialndkdemo"        minSdkVersion 14        targetSdkVersion 24        versionCode 1        versionName "1.0"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘        }    }} dependencies {    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])    testCompile ‘junit:junit:4.12‘    compile ‘com.android.support:appcompat-v7:24.1.1‘}修改後的內容: 
apply plugin: ‘com.android.model.application‘

model {
android {
compileSdkVersion = 22
buildToolsVersion = "22.0.1"

defaultConfig.with {
applicationId = "com.example.walkera.serialndkdemo"
minSdkVersion.apiLevel = 7
targetSdkVersion.apiLevel = 22
}
}
android.ndk {
moduleName = "serialport"
ldLibs.addAll(["android", "log"])
/*
* Other ndk flags configurable here are
* cppFlags.add("-fno-rtti")
* cppFlags.add("-fno-exceptions")
* ldLibs.addAll(["android", "log"])
* stl = "system"
*/
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file(‘proguard-rules.txt‘))
}
}
android.productFlavors {
create("arm") {
ndk.abiFilters.add("armeabi")
}
create("arm7") {
ndk.abiFilters.add("armeabi-v7a")
}
create("arm8") {
ndk.abiFilters.add("arm64-v8a")
}
create("x86") {
ndk.abiFilters.add("x86")
}
create("x86-64") {
ndk.abiFilters.add("x86_64")
}
create("mips") {
ndk.abiFilters.add("mips")
}
create("mips-64") {
ndk.abiFilters.add("mips64")
}
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
dependencies {
compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
compile ‘com.android.support:appcompat-v7:22.1.1‘
}
上面這個是我編譯成功的完整的設定檔,我使用的android studio 版本為1.5;
上述過程全部為工程配置內容,對於源碼部分的內容:
先是在package目錄下,建立一個調用.c檔案的jni java檔案,這個檔案的作用主要是調用由c/c++檔案產生的so檔案內容,即jni api檔案:
接下來我們可以直接編譯整個工程了。(note:上面中的jni是在編譯後才建立的,在這一步的時候,還沒有添加c/c++檔案,也沒有jni目錄)
在編譯成功以後,使用AS的終端或者window內建的終端,運行javah -jni  com.example.walkera.serialndkdemo.SerialPortNdk命令。
注意,這個命令是有講究的:
1)首先是這個命令執行的目錄,必須為項目目錄下app\build\intermediates\classes\all\debug\目錄

2)com.example.walkera.serialndkdemo.SerialPortNdk這個命名,前半部分必須為package名[com.example.walkera.serialndkdemo],後面的SerialPortNdk為調用後續c/c++庫的類名。


javah命令運行成功以後,會產生一個.h的標頭檔。 然後我們這個時候src/main/目錄下建立一個jni目錄,並建立一個c/c++的源檔案,這個源檔案就是我們需要開發的jni native。同時將.h標頭檔拷貝到jni目錄下來,根據.h標頭檔構建並實現自己需要的jni native方法。  大功告成之後,我進行了整個工程的編譯,編譯未報錯,按照網上的說法,我於是尋找so檔案的產生,很多文章介紹是在libs目錄下,但我卻始終找不到,於是以為我工程有問題,哪一步設定出錯了,但編譯又正常,奇怪了。後來同事讓我運行試一下,結果可以正常運行,這就奇怪了,咋沒so產生?於是找了一下,發現: 在新的studio版本中,中間庫so檔案的產生,主要看目錄:     整個大致流程就這樣。 author:   lihaiping1603email:     [email protected] 
出自:http://www.cnblogs.com/lihaiping/p/5829264.html           

(原)使用android studio ndk開發流程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.