是的,你可以做一些聰明的技巧。
部分權限1.
關於清單的權限。這很簡單,不要將權限添加到日誌記錄庫,而是在運行時檢查它。就像這樣:
if (context.checkPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.os.Process.myPid(),
Process.myUid()) == PackageManager.PERMISSION_GRANTED) {
carry on with your write to disk operation ...
}
,然後在你的文檔編寫,如果使用該庫的開發人員希望有一個本地記錄,他們必須對艙單申報WRITE_EXTERNAL_STORAGE。
第2部分(不)導入LIB
所有我在這裏會寫是心臟和100%,未經測試。有可能(會)有一些錯誤,你必須轉移,但希望我會通過一個堅實的想法。
首先在NoobCameraFlash LIB,你會在build.gradle
文件中定義LumberJack
與provided
,而不是compile
。這會使編譯器知道LumberJack
,所以編譯可以通過,但它不會將其包含在實際構建中。
然後在您的NoobCameraFlash庫中創建一個類庫庫funcionalities的鏡像。這意味着方法d(String, String)
,e(String, String)
等
然後你在這個鏡像類,你會像下面的東西,以檢查是否實際上可用伐木工人。
private static boolean lumberJackAvailable = false;
private static boolean lumberJackTested = false;
private static boolean isLumberJackAvailable() {
if(lumberJackTested) return lumberJackAvailable;
lumberJackTested = true;
try {
if(Class.forName("") != null) {
lumberJackAvailable = true;
}
} catch(Throwable e){
// ClassNotFoundException, LinkageError, ExceptionInInitializerError
}
return lumberJackAvailable;
}
public static LumberJackMirror create() {
// could also be a singleton
if(isLumberJackAvailable() return new LumberJackMirror();
else return null;
}
那麼當然你必須檢查if(lumberJackMirror != null)
。所以你可以看到這不是最直接的做事方式。
簡化這一點的另一種方法是在不同的庫中創建一個接口,鏡像和實際的LumberJack實現並使用工廠可以返回接口的空實現,而不必空檢查所有時間。
同樣,在文檔中包含如果開發人員想要具有日誌功能,則必須將其添加到build.gradle
。喜歡的東西compile 'your_groud_id:lumberjack:version'
編輯
這樣做的另一種常見的方式是使其明確的NoobCameraFlash初始化代碼。喜歡的東西:
NoobCameraFlash.config()
.setLogger(new LumberJack());
,這樣迫使開發者瞭解樵夫,而不是通過Class
檢查。但那意味着你需要一些不僅僅是static
方法的LumberJack版本。
end_edit
但希望只允許去除將足夠的,你沒有做到這一點PART.2 =]
編碼快樂。
那麼你不能像[材料對話框](https://github.com/afollestad/material-dialogs)和其他一些庫有兩個版本庫 – Max