jni编译

记录一次编译遇到很郁闷的问题。

就是修改c文件后(该文件在module中),加了行日志,运行androidstudio工程,但是并没有打印出我增加的日志,但是工程仍然正常运行,十分不理解。

点击module的gradle--Task--other---assembleDebug,重新生成编译文件,文件在

SerialPortLibrary\.cxx\cmake\debug\armeabi-v7a\CMakeFiles\SerialPort.dir\SerialPort.c.o下,编译好的so在SerialPortLibrary\build\intermediates\cmake\debug\obj\armeabi-v7a\libSerialPort.so 下。

看着命名编译好了这个so,但是重新运行project,加的日志就是没打印。

检查gradle文件都正常,CMakeLists文件都正常,编译都正常,无奈下,查看其它正常的带JNI代码的工程配置,检查是否一样,倒是看到一些不一样的地方,ndk的 编译版本不一致,只能先改成一致。

ndk {
    abiFilters 'armeabi-v7a','arm64-v8a'
}
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }

CMakeList文件:

cmake_minimum_required(VERSION 3.10.2)

...

这些信息都改成一致了,但是还是编译正常,运行正常,但是就是不打印加的那行日志,实在不理解。

不理解啊,不理解。

clean,rebuild,run,一切正常,清楚工程缓存重启AndroidStudio运行也一样。

已经没辙了,无奈删除module下的c文件和h文件,结果更夸张的是,一切运行正常。。。

这下肯定有其他地方保存了这个so并且工程用的是那个so,压根就没用编译好的这个so,于是检查主工程,结果还真在jniLibs下找到了这个libSerialPort.so,太气人了。

可能上次编译运行后,为了方便直接就把编译好的so拷贝过来了,导致这次把自己坑了。

然后删掉这个so,重新编译,运行,果然打印那行日志了。。。

其他的就是慢慢调试代码了。

对于cmake编译,后续需要更多了解,因为不同的ndk版本,可能会导致编译错误,待续。。。

QQ(504490738)

你可能感兴趣的:(android,gradle,android,studio,android)