2010-10-04 43 views
2

我创建了一个导入到另一个项目中的库项目。 在那个库项目中,我检索它的android:versionName 要做到这一点,你需要提供包名称。 当库项目包含在另一个项目中时执行代码时出现问题,那么看起来该代码会引发异常: 10-04 10:15:36.987:WARN/System.err(1407):getSoftwareVersion( ),捕捉到的异常:android.content.pm.PackageManager $ NameNotFoundException:mobilaria.android.LandenPlayerCodeBase.baseplayer从库项目中检索android:versionName

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

有没有人有过类似的经历或对如何解决这个问题有想法?

回答

2

据我所知目前Android库项目清单被忽略,当你引用一个库时,清单并没有被合并到最终应用程序中。因此你不能从库的清单中提取任何数据。

+0

hhmmm好了,这可以解释它,我猜...但有谁知道这是肯定的任何正式声明或任何人?例如,之前已经广泛使用过一个图书馆项目的人? – TiGer 2010-10-04 10:16:17

+1

有没有人知道这一点呢?是否有可能从AndroidManifest中检索库的版本?如果没有,那么在哪里/如何把图书馆的版本代码/名称? – bianca 2013-02-25 23:24:00

+0

@bianca,请参阅下面的答案,了解如何在Android Studio的Gradle Build系统中获取它。 – JCricket 2015-06-01 23:38:48

1

我刚刚尝试了类似的东西。 我试图添加一个方法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