時不時總會遇到原來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哦
