android apt使用的填坑記錄

你們都知道java的註解(Annotation) 包含了運行時註解和編譯時註解。
運行時註解的例子:java

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InjectView {    
    int id() default 0;
}

編譯時註解的例子:框架

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.CLASS)
public @interface InjectView {    
     int id() default 0;
}

他們之間的區別是RetentionPolicy不一樣。
在開發編譯時註解,咱們一般會寫一個compiler的java module。以我本身的框架爲例,有一個saf-injectview-compilersvg


屏幕快照 2016-12-18 上午11.30.03.png

今天要說的填坑是:這個compiler module在打成jar包,給其餘項目使用須要注意的事項。ui

下面是個人打包腳本spa

task buildInjectCompiler( type: Jar) {    
    archiveName = 'SAF-inject-compiler-'+VERSION_NAME+'.jar'    //初始化資源路徑集    
    
    from baseCompilerPath, injectviewCompilerPath    
    
    //去除路徑集下部分的資源    
    exclude "**/BuildConfig.class"    
    exclude "**/Manifest.class"    
    exclude "**/R.class"    
    exclude "**/R\$*.class"    
    
    //只導入資源路徑集下的部分資源    
    include "cn/salesuite/**/*.class"    
    include "META-INF/services/javax.annotation.processing.Processor"    
    
    destinationDir = file('build/outputs/')
}

最爲重要的是這一句:.net

include "META-INF/services/javax.annotation.processing.Processor" 

是必需要添加的,雖然咱們可能使用 Google 的 auto-service 庫能夠自動生成 META-INF/services/javax.annotation.processing.Processor 文件,可是打包時必定要將這個文件打入jar包,不然沒法使用咱們的自定義註解。code

最後,咱們看一下完成以後compiler包的狀況,咱們已經把javax.annotation.processing.Processor文件打入jar包了。orm


屏幕快照 2016-12-18 上午11.58.38.png

本文同步分享在 博客「fengzhizi715」(JianShu)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。blog

相關文章
相關標籤/搜索