JNI Eclipse项目导入到Android Studio详细步骤

版权声明:欢迎转载,注明出处 https://blog.csdn.net/youyou519/article/details/84390758

学习ndk开发,上课的demo项目是eclipse的,需要将eclipse的项目一直到Android Studio,发现带JNI和so的文件移植起来需要改很多配置,花费了很长的时间,照着网上的文章博客修改,发现很多博客要么就是写了不是很清晰,对于我这种渣渣新手看了仍然很晕,所以自己移植成功后记录一下,加强理解。

环境

Android Studio是3.2.0。首先用Android Studio选FIle,import Project

选择要导入的eclipse项目

点击OK

为了方便这些选项都可以默认

创建完成时候,显示的import-summary.txt是你操作的日志,bug或者变更都可查看下。

发现此时build报错,原因Could not find com.android.tools.build:gradle:3.2.1.后续新版AS没这问题了,解决方法我这里是在build.gradle,都加入google()方法,如图:

重新build,这时又报错

Manifest merger failed : uses-sdk:minSdkVersion 8 cannot be smaller than version 9 declared in library [com.android.support:support-v4:25.3.1] C:\Users\yrq\.gradle\caches\transforms-1\files-1.1\support-v4-25.3.1.aar\ac8b385265bb5dcb256b7626452cf3b1\AndroidManifest.xml as the library might be using APIs not available in 8
	Suggestion: use a compatible library with a minSdk of at most 8,
		or increase this project's minSdk version to at least 9,
		or use tools:overrideLibrary="android.support.v4" to force usage (may lead to runtime failures)

最低版本太低,将 build.gradle最低版本改成你支持的最低版本,不知道可以新建个项目去该项目此文件夹查看,我这里把compileSdkVersion等一起都改成了我默认的。如图

重新编译发现又有这个错 

发现出错您的项目包含c++文件,但它不使用受支持的本地构建系统 ,解决方法,在gradle.properties加入

Android.useDeprecatedNdk=true 

如图

build.gradle的buildTypes函数加入方法

 
 sourceSets {
            main {
                jni.srcDirs = ['libs']//设置禁止gradle生成Android.mk
            }
        }

如图

build一下,然后此时右键app文件夹

选择Link C++ Project with Gradle(不知道为什么不做之前2步添加sdk和添加上面的函数,再build就看不见这个选项),有两种ndk-build和Cmake方法,我用第一个,选择自己的Android.mk(感觉就像c的Makefile),然后选择自己项目的这个文件所在。点ok重新build了。

接着又出现错误

一个错我理解是老版本的关键词和新版本关键词用的不一样,改变成提示的,compile改成dependencies,如下图

另一个错估计提示说最低版本那些东西不应该放在AndroidManifest.xml这个配置文件中,找到这个文件把写最低版本的信息删了,如图

然后重新build。不再报错,然后run。发现又报错。如下

More than one file was found with OS independent path 'lib/x86_64/libtest_cpp.so'

网上说原因是依赖有多个名称不同,但是功能相同的library,在项目根目录下搜一下就可以发现多个如libstlport_shared.so'的同名文件,解决方法是在android加个代码 

   packagingOptions {//加上这些代码
        pickFirst 'lib/armeabi-v7a/libtest_cpp.so'//注意最后的名字跟你项目来写,下面几行也是
        pickFirst 'lib/armeabi-v8a/libtest_cpp.so'
        pickFirst 'lib/arm64-v8a/libtest_cpp.so'
        pickFirst 'lib/x86/libtest_cpp.so'
        pickFirst 'lib/x86_64/libtest_cpp.so'
    }

如图加进去,加到之前加方法的那个android里面

编译运行 

运行成功。至此移植成功。

总结

即使移植成功,但是很多步骤还是不太理解为什么报这错,还有要好好加强学习,后面是比较好的参考博客。 

参考

https://blog.csdn.net/mingchong2005/article/details/80763704

猜你喜欢

转载自blog.csdn.net/youyou519/article/details/84390758