標籤:false read add execution 路徑 complete result ati red
網上翻了幾百篇部落格,看了半天,要不就是寫的亂七八糟看不懂,要不就是隱藏了一些細節,要不就是實現不了,最後還是在Android官網上看明白了,而且說得有條有理,以後遇到不懂的一定要先翻官網。
參考資料:https://developer.android.com/studio/projects/add-native-code.html?utm_source=android-studio#link-gradle
1. 匯入eclipse到Android studio1. 匯入工程:
點擊如下所示:
匯入之後會建置錯誤和一個檔案:
1). 產生的錯誤:
Gradle ‘android-serialport-api-master‘ project refresh failedError:Minimum supported Gradle version is 4.1. Current version is 2.14.1. If using the gradle wrapper, try editing the distributionUrl in F:\AndroidWork\AndroidStudio\android-serialport-api-master\gradle\wrapper\gradle-wrapper.properties to gradle-4.1-all.zipConsult IDE log for more details (Help | Show Log)
從上面可知是gradle版本太低,需要升級gradle
解決辦法:修改gradle-wrapper.properties
#Fri Nov 10 19:29:01 CST 2017distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/distsdistributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip //修改為警告對應的版本
2). 產生了一個import-summary.txt
下面對該檔案進行說明
ECLIPSE ANDROID PROJECT IMPORT SUMMARY======================================Ignored Files: //忽略掉的檔案--------------The following files were *not* copied into the new Gradle project; youshould evaluate whether these are still needed in your project and ifso manually move them:* README.md* run_emulator.shMoved Files: //移除掉的檔案------------
/*因為安卓gradle工程和eclipse的ADT使用的構建工程的方法不同,所以這裡對一些工程目錄進行了重構*/Android Gradle projects use a different directory structure than ADTEclipse projects. Here‘s how the projects were restructured:/*舉例:eclipse目錄下的jni\改為Android studio目錄下的ManiMenu\src\main\jni\
*/* AndroidManifest.xml => MainMenu\src\main\AndroidManifest.xml* jni\ => MainMenu\src\main\jni* res\ => MainMenu\src\main\res* src\ => MainMenu\src\main\javaNext Steps: //接下啦需要做的事情-----------
/*需要網路去下載一些依賴的庫或者對應的SDK之類的東西*/You can now build the project. The Gradle project needs networkconnectivity to download dependencies.Bugs:-----If for some reason your project does not build, and you determine thatit is due to a bug or limitation of the Eclipse to Gradle importer,please file a bug at http://b.android.com with categoryComponent-Tools.(This import summary is for your information only, and can be deletedafter import once you are satisfied with the results.)
2. 修改build.gradle:
因為我們的應用只是用在Android4.2.2上面,對應的SDK版本為17。(看了eclipse上全部都是17,所以應該不用考慮相容其他版本的應用,照著改)
如果不記得,看看這兩篇:
Android studio的gradle
Android系統版本、平台版本、SDK版版本、gradle修改
android { compileSdkVersion 17 //修改這裡,編譯版本的SDK buildToolsVersion "27.0.1" defaultConfig { applicationId "android_serialport_api.sample" minSdkVersion 17 //修改這裡,最小的SDK版本 targetSdkVersion 17 //修改這裡,目標的SDK版本 ndk { moduleName "serial_port" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.txt‘ } }}
這個時候Android studio會去網上把對應的SDK下載下來,等待幾分鐘
3. 編譯不通過(無法構建本地C++系統)
再次編譯,發生錯誤
Information:Gradle tasks [:MainMenu:assembleDebug]Error:Execution failed for task ‘:MainMenu:compileDebugNdk‘.> Error: Your project contains C++ files but it is not using a supported native build system. //工程無法使用本地C++構建系統 Consider using CMake or ndk-build integration. For more information, go to: https://d.android.com/r/studio-ui/add-native-code.html Alternatively, you can use the experimental plugin: https://developer.android.com/r/tools/experimental-plugin.htmlInformation:BUILD FAILED in 3sInformation:1 errorInformation:0 warningsInformation:See complete output in console
這個時候下載三個軟體:
其中:
NDK:通過NDK-build方法來使用本地庫
CMake:通過CMake方法來使用本地庫
LLDB:用來調試C/C++的工具
2. 方法一:將gradle通過NDK-build關聯到本地庫
注意:NKD-build在Android studio3.0版本以後就不能再用了,必須使用CMke,不過我覺得3.0並不是很好用,比如安裝的時候沒有選擇SDK路徑,預設C盤,每次安裝完又忘記改,搞得C盤越來越大,換回2.3接著用,還可以使用NDK-build
1). 將Android studio查看方法改為Android視圖。
2). 選擇Link C++ Project with Gradle
3). 選擇ndk-build。
4). Project Path 旁的欄位為您的外部 ndk-build 項目指定Android.mk 指令檔。
編譯OK。完成
查看android-serialport-api-master\MainMenu\build.gradle
apply plugin: ‘com.android.application‘android { compileSdkVersion 17 buildToolsVersion "27.0.1" defaultConfig { applicationId "android_serialport_api.sample" minSdkVersion 17 targetSdkVersion 17 ndk { moduleName "serial_port" //這裡已經自動添加了 } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.txt‘ } } externalNativeBuild { ndkBuild { path ‘src/main/jni/Android.mk‘ } }}
虛擬機器效果:
3. 方法二:將gradle通過CMake關聯到本地庫
使用的時候忘記儲存流程了,懶得再去試一遍,跟NDK-build方法差不多,就是選擇方法的時候改一下,具體可以看上面貼的官網,要是以後有時間再寫上吧。
將應用代碼由eclipse匯入Android studio的方法NDK-Build和Cmake兩種方法(以android_serialport_api為例)