教会你彻底解决android studio c/c++ jni代码无法跳转
时不时总会遇到原来c c++ jni代码跳转很欢乐,突然也不知道咋滴了build也能build成功,运行也能正常运行,就是代码不能跳转了,首先来科普下一些背景知识。
如果让代码跳转起来,大概需要做哪些操作呢?
1、编译器的前段让代码生成tag,通过tag它就建立了一一对应或者多多对应的关系。
2、ui工具对这些tag也做了标记,从而让你点击能跳转
这里边大致涉及到了四个模块
1) gralde
gradle是既能干ant用来打包项目的活儿,又能干maven引入第三方库的活儿,用能用groovy写脚本来定制化自己的操作。
在android studio里边用gradle是这样自己的,你只需要在gradle/wrapper/gradle-wrapper.properties里边修改这一行即可。
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
2) android studio gradle plugin
google官方基于gradle进行了一些开发,做出了个gradle plugin这个玩意,这个玩意是专用与android studio的,对android工程进行了专门的定制。在as工程的根目录下的build.gradle就能找到它,长这样:
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.3"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
3) cmake
cmake就是一编译的脚本语言,相当于ant的xml文件,告诉你怎么把工程的文件link起来,做出个什么东西。
4) ndk(gcc/clang)
ndk包含了gcc或者clang这样的编译器,编译器来生产出源文件的各种符号tag。
了解了生产要素,我们就可以分析问题是啥了。无非三种:
1. cmake和ndk的版本间发生了奇怪的化学反应,导致编译器生不成正常的ctag,后续无法解析。
解决方案:换换两者的版本组合试试,最好都更新到最新的稳定版本。
2. gradle和gradle plugin的版本间或者与android studio本身的版本发生了奇怪的化学反应,cmake和ndk虽然已经把tag对应好了,但后续处理除了问题,导致ui无法跳转
解决方案:对应gradle和gradle plugin 和android studio的版本。可以参考google官方对应关系:https://developer.android.google.cn/studio/releases/gradle-plugin
如果你的as还有buildtoolversion这种字段,说明你的as版本和gradle plugin的版本低得令人发指,速速升级!
3. build系统紊乱
也有可能是你版本改来改去的过程中,build出的中间文件本身错乱了,所以切换版本之后最好点击file->invalide caches/restart 重启as哦
教会你彻底解决android studio c/c++ jni代码无法跳转的更多相关文章
- 解决 Android Studio 乱码问题
http://www.eoeandroid.com/thread-275485-1-1.html 很多同学都安装了Android Studio,但是发现中文是乱码,其实这个很好解决的.在IDE里点击F ...
- 解决Android Studio Gradle Build特别慢的问题
解决Android Studio Gradle Build 特别慢的问题 C:\Users\你的用户名\.gradle目录下新建一个文件名为gradle.properties的文件.内容为:org.g ...
- 解决Android Studio 3.0导入module依赖后unable to merge index
解决Android Studio 3.0导入module依赖后unable to merge index 项目需要使用im, 在项目里导入了腾讯im的几个module依赖, 项目无法编译, 报错una ...
- 解决Android Studio Conflict with dependency 'com.android.support:support-annotations'报错
解决Android Studio Conflict with dependency 'com.android.support:support-annotations'报错 在Android Studi ...
- 解决android studio引用远程仓库下载慢(转)
解决android studio引用远程仓库下载慢(JCenter下载慢) 第一种方法 使用开源中国的maven库 阿里云的(速度飞快):http://maven.aliyun.com/nexus/c ...
- 解决Android Studio运行时报Error:java.lang.NullPointerException (no error message)错误
原文:解决Android Studio运行时报Error:java.lang.NullPointerException (no error message)错误 ...
- 使用Android Studio向GitHub提交代码
使用Android Studio向GitHub提交代码 在GitHub上创建一个仓库 填写仓库名称.描述.类型(公有.私有)等信息,点击创建 到此,成功创建了我们的仓库,并且初始化创建了README. ...
- 关于Android Studio中使用jni进行opencv配置开发环境的要素秘诀
使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找不到教程,大多都是eclipse下使用mk文件的方法,找不到 ...
- 解决Android studio导入项目卡死
在使用Android studio的时候常常遇到这样的问题,从github或是其他地方导入项目,Android studio呈现卡死的现象!当遇到这种情况时,可以看看是下面那种情况,在按照方法来解决! ...
随机推荐
- 推荐一款颜值逆天且功能齐全的开源Shell工具!
前言 以前在windows上一直使用的SSH工具是XShell,后来转到mac平台,XShell没有mac版本.所以之前一直在找一款颜值高,功能齐全的可以作为日常使用的Shell工具. 我知道mac下 ...
- 【基因组注释】同源注释比对软件tblastn、gamp和exonerate比较
基因结构预测中同源注释策略,将mRNA.cDNA.蛋白.EST等序列比对到组装的基因组中,在文章中通常使用以下比对软件: tblastn gamp exonerate blat 根据我的实测,以上软件 ...
- Perl去重fasta序列
常规方法 #! usr/bin/perl -w use strict; my $input=shift; my %hash; open IN,"<$input"; $/=&q ...
- vim——批量缩进
批量缩进 第一种 按esc,退出编辑模式,到命令模式,并在英语输入法下输入":" 将所要批量缩进的行号写上,按照格式:"行号1,行号2>"输入命令,如要将 ...
- Perl字符串处理函数用法集锦
Perl字符串处理函数 0.函数名 index 调用语法position=index(string,substring,position); 解说返回子串substring在字符串string中的位置 ...
- 数据集成工具—Sqoop
数据集成/采集/同步工具 @ 目录 数据集成/采集/同步工具 Sqoop简介 Sqoop安装 1.上传并解压 2.修改文件夹名字 3.修改配置文件 4.修改环境变量 5.添加MySQL连接驱动 6.测 ...
- 使用Redis实现令牌桶算法
在限流算法中有一种令牌桶算法,该算法可以应对短暂的突发流量,这对于现实环境中流量不怎么均匀的情况特别有用,不会频繁的触发限流,对调用方比较友好. 例如,当前限制10qps,大多数情况下不会超过此数量, ...
- vue-baidu-map相关随笔
一,使用vue-baidu-map 1.下载相关包依赖 npm i vue-baidu-map 2.在main.js中import引入相关包依赖,在main.js中添加如下代码: import B ...
- display:inline-block,block,inline元素的区别
1.display:block将元素显示为块级元素,从而可以更好地操控元素的宽高,以及内外边距,每一个块级元素都是从新的一行开始.2.display : inline将元素显示为行内元素,高度,行高以 ...
- 银联acp手机支付总结
总结: 1.手机调用后台服务端接口,获取银联返回的流水号tn 银联支付是请求后台,后台向银联下单,返回交易流水号,然后返回给用户,用户通过这个交易流水号,向银联发送请求,获取订单信息,然后再填写银行卡 ...