CMake 3.10ずAndroid Studioをフィヌチャヌした探偵物語

免責事項以䞋に蚘茉されおいるものはすべお良い習慣ではありたせん。 このテキストはアクションのガむドずしお読たれるべきではありたせん-その圹割はむしろ面癜いです。 同じ理由で、著者私に蚀語、ツヌル、OS、ハヌドりェア、性別、居䜏囜を倉曎するよう助蚀するこずは意味がありたせん。



プロゞェクトが1぀ありたす。 圌はCMakeを䜿甚しおビルドし、たた、 Hunterず呌ばれるC ++パッケヌゞマネヌゞャヌを䜿甚しお、CMakeずうたく統合しおいたす。 このプロゞェクトは、いく぀かのプラットフォヌム甚に組み立おる必芁がありたす。そのうちの1぀はAndroidです。 HunterはAndroidの䟝存関係を問題なく収集したすが、CMake> = 3.7のバヌゞョンが必芁です。3.7でこのプラットフォヌムのサポヌトが远加されたためです。 これは非垞に重芁な詳现です。



CMakeは、 NVIDIA Nsight Tegraプラグむンを䜿甚しお、Windows / Visual Studio甚のAndroidプロゞェクトの生成をサポヌトしたす。 残念ながら、このプラグむンはVisual Studio 2017にむンストヌルされおおらず、1぀のプロゞェクトのために2015をむンストヌルしたくありたせんでした。 䞀方、VS2017にはAndroidのビルドサポヌトがありたすが、CMakeからそのようなプロゞェクトが生成されるこずはありたせん。 より正確には存圚したすが 、 MicrosoftのCMakeの自䜜バヌゞョンが必芁であり、その開発はバヌゞョン3.4の領域で攟棄されたした。぀たり、私には合いたせん。



さお、Visual Studioではない堎合は、Android Studioです CMakeはもちろんサポヌトしおいたせんが、すでにバヌゞョン2.xからサポヌトしおいたす。 build.gradleでCMakeLists.txtぞのパスを指定し、同期を開始するず、すべおが機胜するはずです。 ただし、機胜したせんが、「CMakeがむンストヌルされおいたせん」ず衚瀺されたす。 理由-しかし、Androidリポゞトリからダりンロヌドする必芁があり、バヌゞョン3.6でフリヌズした独自のフォヌクCMakeでも動䜜するためです。



行き止たりのようです。 ただし、実際にはそうではありたせん。バヌゞョン3.0以降、Android Studio は 、「Androidサポヌトの改善」により、3.6より叀いCMakeの倖郚バヌゞョンで動䜜できるようになりたした。 local.propertiesにcmake.dirフィヌルドを蚘述するだけで十分で、すべおが機胜するはずです。 しかし、それは機胜したせんが、蚀う...うヌん、正盎蚀っお、私は圌がそこに蚀ったこずをすでに忘れおいたしたが、ポむントはGoogleで採点された゚ラヌテキストがバグトラッカヌの䌚話に぀ながったずいうこずですAndroid Studioを䜿甚した3.8 CMakeは䜕らかの方法で誀っお通信するため、これらはすべおバヌゞョン3.9で修正する必芁がありたす。



そしお、私はCMake 3.8を持っおいたす。 さお、それは問題ではありたせん。サむトにアクセスしお、バヌゞョン3.10の最新のCMakeをダりンロヌドしたす実際、3.10は3.9よりも良いのでしょうか、それずも少なくずも悪くありたせんか。 むンストヌルするず、すべおが機胜するはずです。 ただし、機胜したせんが、「CMake Serverずの通信゚ラヌ-ログを参照しおください」ず衚瀺されたす。 ログは簡朔に宣蚀したす



CMAKE SERVER: [== "CMake Server" ==[ CMAKE SERVER: {"supportedProtocolVersions":[{"isExperimental":true,"major":1,"minor":1}],"type":"hello"} CMAKE SERVER: ]== "CMake Server" ==]
      
      





ご芧のずおり、間違いはありたせん。 ずころで、はい、しかしCMake Serverはどうですか 初めお聞いた。 ドキュメントにアクセスしお、これは倖郚プログラムがCMakeプロゞェクトに関する情報を機械可読圢匏で受信できるようにする新しいCMake操䜜モヌドであり、さたざたなIDEおよび远加ツヌルずの統合を簡玠化するこずを読みたす。



これが探偵の始たりです。 最初の蚌拠は、サヌバヌ応答の「メゞャヌ」および「マむナヌ」フィヌルドです。 プロトコルバヌゞョンがあるため、誰かがそれをチェックでき、「間違った」バヌゞョンでは動䜜したせん。 仮定は非垞に可胜性が高いが、仮定のみ-確認を取埗するのが良いでしょう。



実際、この時点で私は䞀時停止しお譊察に報告し、Android Studioのバグトラッカヌのバグを取埗するこずにしたした。 残念なこずに、バグに察する反応はなく、数日埌にトラッカヌから消えたした-WONTFIXでも閉じられたせんでした。぀たり、トレヌスなしで消えたした。 怒ったので、私は自分の調査を終えるこずにしたした。



おそらく読者の䞭には、Android Open Source Projectで積極的に䜜業しおいる人、たたは少なくずもそのデバむスに粟通しおいる人がいたす。 私のさらなる冒険を圌らに笑わせおください。



CMleずの統合を担圓するGradleのAndroidプラグむンの゜ヌスを芋぀ける必芁がありたした。 普通のたずもな垂民ずしお、Googleで「Android gradle plugin source」ずいうフレヌズを採点し、それに応じおリポゞトリペヌゞを取埗したした。 ただし、Webむンタヌフェヌスを䜿甚しお簡単に怜玢するず、masterでの最埌のコミットは2幎前であるこずがわかりたした。 そしお、新鮮な皮類はどこですか はっきりしない



同じ怜玢の2番目のリンクから、 「AOSP゜ヌスコヌドをダりンロヌドする方法」ずいう指瀺がありたした。 これを行うには、簡単ではない、ず蚀わざるを埗たせん。Googleは、い぀ものように、人のようではなく、Gitから特定のプロゞェクトをダりンロヌドするこずはできたせん。 リポゞトリず呌ばれる独自のツヌルを䜿甚しお䜿甚する必芁がありたす。



線集コメントでは、可胜だず瀺唆されおおり、プロゞェクトはただそれぞれ別のGitにありたす。ペヌゞの䞊郚に「Clone this repo」ずいう倧きな碑文はありたせんでした。 誀報をおaびしたす



リポゞトリを取埗し、これが通垞のPythonスクリプトであるこずを確認しお実行し、゚ラヌを取埗したす-fcntlむンポヌトが芋぀かりたせんでした。 はい、このスクリプトはWindowsでは機胜したせん。 ほら、愛しおる、グヌグル。 誀っお仮想マシンをUbuntuの隅に暪たわっお起動し、そこにリポゞトリをダりンロヌドしお実行し、䜕かが起こっおいるのを芋お、昌食に出発したす。



戻るず、「デバむスに空き容量がありたせん」ずいう゚ラヌが衚瀺されたした。 ええ、はい、そこには5Gbがありたしたが、必芁なプロゞェクトは、すべおの䟝存関係があっおもそれほど重くはなりたせん ただし、簡単な調査の結果、レポはAOSPリポゞトリ党䜓たたはほが党䜓を収瞮させ、別のプロゞェクトを䌝える方法はたったくありたせんでした。 郚分的には、私が理解しおいるように、これはGitのせいであり、Googleがそれを䜿甚する方法です。 各プロゞェクトを独自のリポゞトリに抌し蟌むのではなく、すべおを1぀に抌し蟌みたした。 たた、GitはSVNずは異なり、「完党に」ずいう蚀葉からリポゞトリのサブディレクトリを抜出するこずはできたせん。



「いいえ」私は、「芋なければならない1぀たたは2぀のファむルのために、サヌカスず銬を䜿っおAndroid党䜓を送り出すこずを決めたした。私は望んでいたせん。」



盎芳は、私が必芁ずしたプラグむンのバヌゞョンの゜ヌスコヌドがただどこかにあるべきだず瀺唆したした。 しかし、心は行き詰たっおいたす。 そこで私は、Android開発者向けの公匏リ゜ヌスに関するヘルプを探すこずにしたした。 Google+のグルヌプはすぐに拒吊したす-これは深刻な䌚話のプラットフォヌムではありたせん。 ただし、Googleグルヌプの叀き良きメヌリングリストが必芁です。 それらの2぀がありたす-「ちょうどAndroidアンドロむド開発者」ず「NDKアンドロむド-ndkを持っおいる人のために」。 NDKでの私の問題は、ほずんどないようですので、最初のリンクを開きたす...そしお、「このグルヌプはマルりェアを送信するので、閉じたした。 眲名、Google。」。



愚かな驚きのシヌン。



さお、NDK開発者向けに2番目のグルヌプを開きたす。 圌女は劎働者です。 私たちはCMakeずいう蚀葉を怜玢に取り入れ、面癜いものを芋぀けお芋぀けたいず思っおいたす トピックのタむトルは「Android Studioに倖郚CMakeを䌝えるにはどうすればよいですか」 圌女の簡単なレビュヌによるず、これがたさに倉曎が議論された堎所であり、プラグむンにバヌゞョン3.0.0が登堎したこずを瀺しおいたす。 この機䌚。 プラグむンで䜕かを理解しおいる人がトピックに呌ばれたした。 圌は、トピックの䜜成者にリポゞトリぞのリンクを提䟛したしたリポゞトリを䜿甚するように曞かれおいるのず同じ圹に立たないものです。



それで十分でした。 Google怜玢で名前を付けお、すぐにリポゞトリで名前を芋぀けたした 。 確かに、これはstudio-2.2-preview3ブランチのファむルでした。぀たり、CMakeの倖郚バヌゞョンずの統合がなかった以前のファむルです。



それから、はるかに早く来るはずだったこずがわかりたした-2幎前、プラグむン開発者はマスタヌぞのコミットを停止し、ブランチですべおの開発を開始し、結果をメむンにアップロヌドしたせんでした。 私を正圓化するのは、このスタむルでGitを䜿甚したこずがないずいうこずです。䞀般的に、芋たすべおのプロゞェクトは、通垞、最終的にmasterの倉曎をマヌゞしたした。 ただし、ブランチのリストを詳しく調べる必芁があるこずを知っおいたずしおも、正しいブランチを芋぀けるのは事実ではありたせん。䜕癟ものブランチがあり、䜜成日が衚瀺されないため、名前がわかりたせんでした。



ブランチ名を盎接studio-3.0のURLに倉曎し、...を芋぀けたしたが、完党ではありたせん。このファむルには、CMake Serverプロトコルのバヌゞョンぞの参照がありたせん。 しかし、これはもう怖いものではありたせん。Webむンタヌフェヌスのおかげで、レポずは異なり、tgzで別のリポゞトリフォルダヌをダりンロヌドしお、そこから怜玢できたす。



コヌドを芋るず、それが本圓にプロトコルバヌゞョンであるこずがわかりたした。 プラグむンはそれを明確な通信1.0getSupportedVersion関数内ず比范し、新しいCMakeは1.1を䜿甚したしたずころで、次のバヌゞョンでは、すでに1.2になりたす。 CMakeコヌドを調査したずころ、バヌゞョン1.1で根本的に砎壊されるものは䜕も远加されないこずがわかったため、この愚かなチェック以倖にAndroid Studioが動䜜するのに障害はありたせんでした。 したがっお、ディスク䞊にgradle-core-3.0.0.jarファむルを芋぀け、そのクラスを削陀し、Java Bytecode Editorを䜿甚しお、すべおが機胜するようにチェックを倉曎したした 免責事項自宅で繰り返さないでください職堎;トリックは必死で非垞に怒っおいるプログラマヌによっお行われたした 。



そしおそれは働いた。



PS実際には、そうではありたせん。䜕らかの理由で、Androidでビルドする堎合、CMakeは゜ヌスファむルぞの誀った盞察パスを䜿甚したす。゜ヌスファむルはオブゞェクトファむルに移動し、その結果、ラむブラリ内のデバッグ情報に移動したす。 そしお、ラむブラリヌがたったくないため、デバッガヌはこれらのパスで䜕も芋぀けるこずができたせん。 しかし、これは別の、はるかに短い話です。



All Articles