今天在练习JNI项目时,Android studio版本为:3.1.3,Gradle版本为4.4。由于Android studio 3.X弃用了
android.useDeprecatedNdk=true,要求使用Cmake的方式进行库文件构建。因此,学习了Cmake
的构建方式。
在写完代码之后,sync时总是报错:com.android.ide.common.process.ProcessException: Error configuring,却不能给出出错的准确位置。
Google和百度,未能找到解决方案,使用gradlew build也不能看出明显出错的方案。
忍无可忍,按照https://developer.android.com/studio/projects/add-native-code#new-project 官网自动生成demo项目,竟然发现也会报同样的错误。(ps,clean、invalidate and restrat均无用)。考虑到可能是Android studio抽风,于是在另一台新装的电脑上构建试一下。工程拷贝过去后,发现一样。
用新电脑的Android Studio(版本3.2.1)新建一个官方的jni demo项目,竟然..通过了!!
于是比较两个项目的差异,除了版本外,新电脑生成的工程默认的classpath为:
classpath 'com.android.tools.build:gradle:3.2.1'
使用的gradle版本为4.6。旧电脑生成工程默认的classpath为:
classpath 'com.android.tools.build:gradle:3.1.3'
使用的gradle版本为4.4。两者使用的ndk版本均为19.0,cmake版本为3.10.2。
于是将旧电脑的classpath和gradle更新,与新电脑的一致,sync,构建通过。
第二个问题(见 https://github.com/googlesamples/android-ndk/issues/510):Android工程所在的目录的任何一级,不要有中文、空格等特殊符号,最好与java的命名规则保持一致,否则cmake会报错:
C:\Users\Administrator\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {-HC:\Users\Administrator\AndroidStudioProjects\WatermelonKnows\app -BC:\Users\Administrator\AndroidStudioProjects\WatermelonKnows\app.externalNativeBuild\cmake\debug\armeabi-v7a -DANDROID_ABI=armeabi-v7a