教會你徹底解決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哦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM