2016-07-22 61 views
0

我使用,我想提取應用的應用版本,它正在使用一個庫,一切都很好與反思獲取的味道「版本名稱」從AAR

Class.forName(context.getPackageName() + ".BuildConfig"); 

但隨後...我把應用程序分開,類庫現在找不到BuildConfig類,它總是拋出「類未找到異常」...調試我注意到,我想要它的默認項目ID的版本名稱或我的課程的實際名稱,而不是味道的應用程序ID。

這是我的配置gradle。

productFlavors { 
    development { 
     applicationId "com.dev.testit" 
     buildConfigField 'String', 'API', '"api"' 
     minSdkVersion 16 
     targetSdkVersion 24 
     versionCode 1 
     versionName '1.N' 
    } 
    production { 
     applicationId "com.testit" 
     buildConfigField 'String', 'API', '"prod"' 
     minSdkVersion 16 
     targetSdkVersion 24 
     versionCode 1 
     versionName '1.S' 
    } 
} 

有沒有辦法?

謝謝

+0

爲什麼不讓應用程序通過構造函數參數,方法調用等將版本名傳遞給庫? – CommonsWare

+0

我在想我的最後一個解決方案,但如果可能的話,我希望它可以更自動一點。 –

+1

如果此庫僅供您個人使用,您似乎在過度設計問題,恕我直言。同樣,恕我直言,如果這個庫是爲了更廣泛的使用,你不應該假設任何關於應用程序環境的東西,比如'BuildConfig'類的位置以及'BuildConfig.VERSION_NAME'是否是開發人員希望你使用的值的字符串資源,用於翻譯)。 – CommonsWare

回答

0
public static String getAppVersionName(Context context) { 
    if (context == null) 
     return null; 

    PackageManager packageManager = context.getPackageManager(); 

    try { 
     PackageInfo info = packageManager.getPackageInfo(context.getPackageName(), 0); 
     return info.versionName; 

    } catch (PackageManager.NameNotFoundException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

參考doc here

+0

不工作。它傳遞了味道的開發ID ...它總是例外。 :/ –