2017-08-15 110 views
0

我想創建一個註釋處理器,在realm.io上工作 不幸的是,使用領域需要一個android項目,而創建一個註釋處理器,你需要一個java的(爲了導入javax.annotation.processing。*)註釋處理器與Android庫(領域)

任何人都知道一種方式來導入一個android庫的AbstractProcessor和所有其他需要的東西?我無法找到我的方式來做到這一點(已打開targetCompatibility和sourceCompatibility至1.7)

回答

0

的方式導入AbstractProcessor和所有其他需要的東西,在Android庫

最好的問題:你爲什麼要那樣?

如果你的印象是你的處理器將依賴於Realm類(或任何其他Android類), - 情況並非如此。當您編寫使用APT鏡像API的代碼時,您不必直接引用這些類,而只需使用名稱。生成的代碼看起來like this

DeclaredType theBinder = lookup("android.os.Binder"); 
DeclaredType theIInterface = lookup("android.os.IInterface"); 
DeclaredType theCreator = lookup("android.os.Parcelable.Creator"); 
... 
private DeclaredType lookup(CharSequence name) { 
    return types.getDeclaredType(elements.getTypeElement(name)); 
} 

你會再繼續使用TypesElements工具類的方法來操作創建TypeMirrors。您還可以將這些鏡像轉換爲其他格式,例如Square的JavaPoet TypeName,但實際上並不需要,因爲Mirror API提供了您可能需要的大多數功能。

您絕對不想在您的註釋處理器中加載Realm的類。首先,這根本就不需要。但更重要的是,正如您在問題中指出的那樣,在註釋處理器和運行時應用裝置之間共享相同的設置通常是不可能的。這個問題並非Android獨有,例如,沒有人希望設置完整的應用程序服務器來編譯服務器程序,該服務器程序使用支持JAXB的註釋處理器。

如果你確實想要在你的處理器中使用Realm的一段代碼,並且它不能作爲獨立的Java庫提供,最簡單的方法就是將該代碼複製到你的處理器。

+0

終於我做到了,非常感謝!完美的解釋! –