检测是否从Android电子市场下载了应用程序
我有一个Android库将数据上传到testing服务器和生产服务器。 我希望使用此库的开发人员在开发时使用testing服务器,以及在从Android Market下载应用程序时使用生产服务器。
这是可能的应用程序来告诉它来自哪里(市场或非市场?)我会想象一个人可以检测到签署的JAR文件的存在。
是的,你可以使用签名。 如果在开发过程中使用debugging密钥对应用程序进行签名,并在将应用程序上传到市场时使用释放密钥,则可以检查应用程序签名的签名,并基于该使用testing或生产服务器。 这里是一个小的代码片段来读取您的应用程序的签名:
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中使用的软件包名称。 祝你好运
标记
从API 5开始,您可以使用PackageManager.getInstallerPackageName(String) 。 从文档:
检索安装软件包的应用程序的软件包名称。 这确定了包裹来自哪个市场。
要获得Android电子市场的软件包, 这个post可能会有所帮助。
据我所知,市场应用程序没有什么能够“标记”一个应用程序,说它是从市场上下载的。
我看到另一个Android库以不同的方式接近了这个问题。 AdMob Android SDK可以免费下载和使用维基中描述的内容 。 这个库提供广告,所以他们有相同的愿望,能够确定当前正在运行的应用程序正在由开发人员进行testing,还是正在“野外”使用。 他们的方法是要求开发人员在XML中设置“testing”属性或调用他们的库“setTesting(boolean)”函数让图书馆知道要投放哪些广告。 这显然是更多的手动方法,依赖开发人员在发布之前更改一行代码或XML。
您可以将configuration默认为生产环境,并使用将configuration设置为testing环境的自定义Instrumentation
。 在发布到android市场之前,应该删除工具。
也许你可以添加一个设置到你的应用程序的“开发人员模式”。
另一种可能性是,在SD卡上寻找一个特殊的文件或configuration文件,然后closures它。
- 使用Html,Css和JavaScript开发android应用程序
- “没有足够的信息来推断参数T”与Kotlin和Android
- Android studio:为什么在AndroidManifest.xml和build.gradle中都指定了minSdkVersion和targetSdkVersion?
- ScrollView .scrollTo无法正常工作? 保存ScrollView的位置在旋转
- 如何禁止“避免使用捆绑版Google Play服务SDK”警告?
- 如何在Android工作室中导出项目?
- 如何在Android中设置TextView的颜色?
- toLowerCase上的NullPointer,但是我不会在任何地方使用该方法
- 如何从单个editText删除焦点