我有一个Android库,可以将数据上传到测试服务器和生产服务器。我希望开发人员在开发时使用此库来使用测试服务器,并在从Android Market下载应用程序时使用生产服务器。
应用程序是否可以告诉它来自哪里(市场或非市场?)我想可以检测到已签名的JAR文件的存在。
答案 0 :(得分:37)
是的,你可以使用签名。如果您在开发期间使用调试密钥签署应用程序,并在将应用程序上传到市场时使用发布密钥,则可以检查应用程序签名的签名,并基于该使用测试或生产服务器。 这是一个用于阅读应用签名的小代码:
try {
PackageManager manager = context.getPackageManager();
PackageInfo appInfo = manager.getPackageInfo(
YOUR_PACKAGE_NAME, PackageManager.GET_SIGNATURES);
// Now test if the first signature equals your debug key.
boolean shouldUseTestServer =
appInfo.signatures[0].toCharsString().equals(YOUR_DEBUG_KEY);
} catch (NameNotFoundException e) {
// Expected exception that occurs if the package is not present.
}
YOUR_PACKAGE_NAME必须是'com.wsl.CardioTrainer'。它必须是您在AndroidManifest.xml中使用的包名称。 祝你好运
标记
答案 1 :(得分:10)
从API 5开始,您可以使用PackageManager.getInstallerPackageName(String)。来自文档:
检索安装包的应用程序的包名称。 这确定了包裹来自哪个市场。
要获取Android电子市场的套餐,this post可能有帮助。
答案 2 :(得分:3)
据我所知,市场应用程序没有做任何事情来“标记”一个应用程序,说它是从市场上下载的。
我已经看到另一个Android库以不同方式处理此问题。 AdMob Android SDK可以免费下载和使用,如on their wiki所述。这个库提供广告,因此他们有同样的愿望,能够确定当前正在运行的应用程序是否正在由开发人员进行测试,或者是否“在野外”使用它。他们的方法是要求开发人员在XML中设置“测试”属性或调用他们的库“setTesting(boolean)”函数,让库知道要提供哪些广告。这显然更像是一种手动方法,它依赖于开发人员在发布之前更改一行代码或XML。
答案 3 :(得分:1)
您可以将配置默认为生产环境,并使用自定义Instrumentation
将配置设置为测试环境。在发布到Android市场之前应该删除Intrumentation。
答案 4 :(得分:0)
也许您可以为“开发者模式”为您的应用添加设置。
另一种可能性,让它在SD卡上寻找一个特殊的文件或配置文件,并关闭它。