从Library Project中检索android:versionName

时间:2010-10-04 08:25:46

标签: android version

我创建了一个图书馆项目,我将其导入另一个项目。 在某个图书馆项目中我检索它的android:versionName 为此,您需要提供包名称。 当库项目包含在另一个项目中时执行该代码时出现问题,那么该代码似乎抛出异常: 10-04 10:15:36.987:WARN / System.err(1407):getSoftwareVersion(),Caught Exception:android.content.pm.PackageManager $ NameNotFoundException:mobilaria.android.LandenPlayerCodeBase.baseplayer

这就是项目库包的包名......似乎找不到它,即使执行该调用的相同代码是库本身的一部分......

有没有人经历过这样的事情或对如何解决这个问题有所了解?

2 个答案:

答案 0 :(得分:2)

据我所知,目前忽略了android库项目清单,当你引用库时,manifest没有合并到end应用程序中。因此,您无法从库的清单中提取任何数据。

答案 1 :(得分:1)

我刚试过类似的东西。 我试图将方法getLibraryVersion()添加到我的自定义Application类。所以我可以打电话给

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()方法,所以实例始终为null!

由于这种方式无法解决,并且如您所见,您无法以您尝试的方式访问该版本,我只是将版本和库名称硬编码到我的自定义应用程序类中:

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中的String资源,但我不知道更好的方法。因此,您只需更改清单中的库名称和版本,或者更好地更改应用程序类中的strings.xml和。

但是您多久更改一次库名称或版本? 希望这可以帮助别人并节省时间!

PS:上面的一些代码基于此: http://blog.tomgibara.com/post/126377651/global-application-state-in-android