我刚刚尝试了类似的东西。 我试图添加一个方法getLibraryVersion()到我的自定义应用程序类。所以我可以拨打
MyLibrary.getLibraryVersion()
从包含该库的代码中。但似乎无法通过getText()
或getString()
这样的访问字符串资源:
public class MyLibrary extends Application {
@Override
public void onCreate() {
super.onCreate();
// provide an instance for our static accessors
MyLibrary.instance = this;
}
private static void checkInstance() {
if (MyLibrary.instance == null) {
throw new IllegalStateException("Application not created yet!");
}
}
/**
* @return the library name
*/
public String getLibraryName() {
MyLibrary.checkInstance();
return MyLibrary.instance.getString(R.string.app_project_name).toString();
}
...
}
因为onCreate()方法似乎并没有被调用,该实例始终为空!
由于这种方式不工作了,正如你看到的,你不能访问的版本,你尝试过的方式,我只是硬编码的版本和库的名字,在我的自定义应用程序类是这样的:
public class MyLibrary extends Application {
/**
* @return the library name
*/
public String getLibraryName() {
return "org.yourCompany.android.lib.YourLibName";
}
/**
* @return the library version
*/
public String getLibraryVersion() {
return "1.0.0";
}
}
我知道这是一种肮脏的解决方案,我宁愿更清晰的编码版本,这些字符串作为字符串资源存储在strings.xml中,但我不知道任何更好的方法。所以你只需要在清单中更改库名称和版本,或者更好地改变Application类中的strings.xml和。
但是您多久更换一次库名称或版本? 希望这可以帮助别人,节省时间!
PS:有些上面的代码是基于这样的: http://blog.tomgibara.com/post/126377651/global-application-state-in-android
hhmmm好了,这可以解释它,我猜...但有谁知道这是肯定的任何正式声明或任何人?例如,之前已经广泛使用过一个图书馆项目的人? – TiGer 2010-10-04 10:16:17
有没有人知道这一点呢?是否有可能从AndroidManifest中检索库的版本?如果没有,那么在哪里/如何把图书馆的版本代码/名称? – bianca 2013-02-25 23:24:00
@bianca,请参阅下面的答案,了解如何在Android Studio的Gradle Build系统中获取它。 – JCricket 2015-06-01 23:38:48