微信公众号可以做几个微网站,免费ppt模板公众号,怎么做自己的购物网站,东宁做木耳招工人网站使用的android studio3.0.1版本#xff0c;sdk 27.
新建的测试程序#xff0c;勾选了c支持#xff0c;默认有native_lib.cpp。
1.在cpp中添加了测试的native代码#xff0c;提示No implementation found for错误#xff0c;怎么看都跟之前的默认函数没啥区别啊#xff…使用的android studio3.0.1版本sdk 27.
新建的测试程序勾选了c支持默认有native_lib.cpp。
1.在cpp中添加了测试的native代码提示No implementation found for错误怎么看都跟之前的默认函数没啥区别啊于是盯着简单cpp代码逐行扫描。。。。。5分钟后我去自动生成的代码extern c竟然没有跟{}所以默认函数享受了extern c而我添加的测试代码被认为没有实现这绝对是个坑啊。以上添加{}问题解决。
2.executing external native build for cmake 错误由于添加了其他的测试代码准备进行一些模块功能测试所以有了目录分层所以相当于调整了CMakeLists.txt然后就是各种错误之前只关注了这个错误并不太熟悉android studio的操作然后就各种点点点终于发现了在messages窗口gradle sync中有CMake Error的提示比如我的错误是提示cmakelists.txt中的哪一行出错的在gradle console中有具体的错误提示我好多cpp文件找不到而这些文件正是我后添加在其他目录的文件所以问题明显源文件目录错误编译器找不到。。。。。。以上修改正确的目录层级问题解决。
3.将已有c代码导入编译时提示各种标准库函数无法使用比如std::to_string、make_unique等等分两步一个是因为没有使用c标准库需要参数arguments -DANDROID_STLc_shared一个是因为需要c14支持cppFlags -stdc14这两问题个是查了资料https://stackoverflow.com/questions/22774009/android-ndk-stdto-string-support
4.想要添加另一个依赖库代码编译为android平台的so报错error: linker command failed with exit code 1 (use -v to see invocation)发现是生成的so与最终依赖库的位置写的名字不一致导致的。
5.因为之前的c代码中有很多同事的中文注释直接用到android studio中会提示encoding问题这时候就需要在Settings---Editor---File Encodings中指定编码格式点击右边的小加号选择c代码目录出现在path中后面的encoding中选择GBKapply--ok会发现都能正确显示中文了。
6.需要release版本的库选择窗口左下角的Build Variants,然后选择对应的Variant当然选择release之后会提示错误需要配置签名这个大家可以查查有很多教程。
7.关于debug进入c/c代码找到了一个方法edit configurations--debugger--symbol directories界面里点击右边的小加号将项目生成的中间.o文件目录添加进来之后在c/c代码加断点就可以进入调试了。
8.如果调试的手机或者平板没有全部的打印信息让你无法调试自己的程序可以网上查找对应型号的设备如何打开工程模式因为工程模式可以打开log级别的设置很多设备都将默认logcat级别设置的高一点提高性能。
9.编译出来的so库比较大查找资料发现需要在cmakelists.txt中设置strip参数
set(CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} -s) set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE} -s)
参考了https://stackoverflow.com/questions/38675403/how-to-config-cmake-for-strip-file瞬间变小了。
10.使用的so库接口api在jni接口中调用竟然提示error: undefined reference to明明已经连接进去了为什么会出现这个问题呢然后将接口extern到jni接口中编译依然报这个错误查看与其他接口差异发现问题没有使用extern c属性所以编译时不认识去哪里找接口添加之后解决问题。
11.有一些平台差异的东西希望在一份源码中同时维护在cmakelist.txt中添加宏方式就是
add_definitions(-DANDROID)代表ANDROID宏-D代表是defined
12.不同库函数有重名冲突的可以在Cmakelists.txt中使用
SET_TARGET_PROPERTIES (libxxx PROPERTIES LINK_FLAGS -Wl,--no-undefined,--version-script,${PROJECT_SOURCE_DIR}/xxx/export.map)
SET_TARGET_PROPERTIES (libxxx PROPERTIES LINK_FLAGS -Wl,--no-undefined,--retain-symbols-file,${PROJECT_SOURCE_DIR}/xxx/export.sym)
参考https://www.2cto.com/kf/201703/610953.html
13.build variant无法切换debug和release的问题应该是缓存问题我尝试删除了.idea目录重新打开android studio就可以切换了。