检查下载源以更改 Android 应用程序中的 API URL

Posted

技术标签:

【中文标题】检查下载源以更改 Android 应用程序中的 API URL【英文标题】:Check download source to change API URL in Android App 【发布时间】:2014-07-23 20:59:35 【问题描述】:

我正在将 ios 应用程序移植到 android,我需要根据它是通过 USB 插入、下载为 .apk 还是通过 Google Play 商店安装来更改 API URL。

这样我就可以使用我的本地开发 API、暂存 API,然后显然是公共生产/发布 API。

我曾经检查过应用程序是否通过 Eclipse 运行:

if ( ( appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0 ) 
    debug_value = "1";

但我需要检查测试/发布之间的区别。

在 iOS 中,我刚刚测试了 DEBUG 预处理器宏,并为 ADHOC 添加了一个。

【问题讨论】:

【参考方案1】:

如果 *.apk 和 Google Play 是相同的版本,我不相信你能看出它们之间的区别。

另一方面,如果您使用 Gradle,则可以直接在名称中添加关键字,以便稍后查看。

这是我的应用程序中的一个示例:

    buildTypes 
        debug 
            versionNameSuffix = "-DEBUG"
        
        release 
            signingConfig signingConfigs.release
        
    

这允许我们检查应用程序:

getPackageManager()
     .getPackageInfo(getPackageName(), 0)
     .versionName
     .contains("DEBUG");

【讨论】:

【参考方案2】:

我发现我可以使用getInstallerPackageaName() 方法来检查它是否是通过应用程序(如Google Play)安装的,否则它会返回NULL

我用过这段代码(它是一个 Cordova 应用程序):

PackageManager packageManager = this.cordova.getActivity().getPackageManager();
String installer = packageManager.getInstallerPackageName( "com.myapp" );

if ( installer == null ) 
    // not installed via application (like Google Play)
 else 
    // installed via application

我可能应该将其扩展为专门检查商店名称,但我刚刚开始使用此功能,Google Play 将返回的安装程序包名称似乎存在一些差异(请参阅下面列出的问题)

getInstallerPackageName() 的 Android 文档:

http://developer.android.com/reference/android/content/pm/PackageManager.html#getInstallerPackageName(java.lang.String)

关于 SO 的类似问题:

getInstallerPackageName returns null Can PackageManager.getInstallerPackageName() tell me that my app was installed from Amazon app store? Detect if an Android app was downloaded from Google Play vs Amazon vs Other

【讨论】:

以上是关于检查下载源以更改 Android 应用程序中的 API URL的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 Android 应用程序中的版本更改

禁用listView android中复选框的更改

如何在 android 复选框检查更改上接收事件?

运行应用程序与应用更改 android studio 2.3

使用android中的颜色选择器更改textview的文本颜色和背景颜色

更改完整:App displayName,logo,iOS和Android [2018]?