標籤:
先使用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開發流程