最近有一個問題,困擾了很久都沒有解決,就是在使用aidl進行進程間通信時,我的開發環境無法自動在gen目錄下生成java文件。
我用的是ubuntu的操作系統。而同樣的source在其他同事的開發環境下都是可以的。
檢查sdk開發包安裝都沒有問題,platform-tools文件夾下aidl的編譯工具也安靜的躺在那邊,怎么就不工作呢?薪水太少??
在android發布了4.1開發包以后,發現tools和platform-tools都有更新安裝,於是想剛好趁這個機會看能不能把問題解決。
於是更新安裝最新的tools和platform-tools。clean一下project,重新build,竟然報錯了,之前一直都沒有報錯的。
第一感覺,完了!
之前aidl無法自動生成java,可以從同事那邊拷貝來用。現在項目報錯,gen下面的所有文件都無法自動生成!!!
難道要逼我重做開發環境?沒辦法。跟他拼了!!!於是在mac機上試做一個開發環境,安裝最新版的SDK,同樣的錯誤!!
看來問題已經嚴重到即使我重做開發環境也不會解決的程度。狹路相逢,只有解決掉他了。
報的錯誤是讓我去看他workspace下的log。
Failed to run com.android.ide.eclipse.adt.internal.build.AidlProcessor. Check workspace log for detail.
於是,打開workspace/.metadata/.log
!ENTRY com.android.ide.eclipse.adt 4 0 2012-08-23 11:09:52.961
!MESSAGE Failed to run com.android.ide.eclipse.adt.internal.build.AidlProcessor. Check workspace log for detail.
!STACK 0
java.lang.NullPointerException
at com.android.ide.eclipse.adt.internal.build.AidlProcessor.doCompileFiles(AidlProcessor.java:113)
at com.android.ide.eclipse.adt.internal.build.SourceProcessor.compileFiles(SourceProcessor.java:244)
at com.android.ide.eclipse.adt.internal.build.builders.PreCompilerBuilder.build(PreCompilerBuilder.java:638)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
於是到google上查找原因。有人有同樣的問題,下面的解答中有下面這句話。
I had this exact issue happen to me today. It turns out this happens when there are source folders in your project that do not actually exist.
So verify in your project Java Build Path that all source folders actually exist. After removing a dead source folder link from there my project once again compiled the aidl.
於是試着去看看我項目中有沒有這樣的文件夾,赫然發現有一個本項目依存的另一個項目名稱的文件夾,里面是空。
因為調試程式的原因,把本來jar文件的原始項目引進來,不知道怎么就生成了這么個文件夾。
情況不會比現在更糟糕了,於是也不管他會不會用到,直接刪除。
報錯不見了!!!gen文件夾下文件通通自動生成了。到此問題解決。