我正在开发一个Android应用程序。 它使用一些网络服务,如:
当我开发这个时,一切正常。 所以我在手机上测试了它,然后我把它上传到了游戏商店。 上传到Play商店后,我尝试下载并测试。 但ping只是失败!!!
我无法理解这种情况。
首先,Firebase Firestore正常运行。
其次,我正在使用第三方REST API。要使用该服务,我正在使用" Retrofit"图书馆。 它也可以正常工作。
第三,我的应用程序具有检查服务器状态的功能。 对于此功能,我实现了" ping"。 这只是ping。
" ping -c 1 xxx.xxx.xxx.xxx"
显示最终用户的延迟。 它在调试/发布/签名APK中工作正常。
但是当我从Play商店下载时它不起作用。
我只添加了一个权限。
<uses-permission android:name="android.permission.INTERNET" />
我是否应该定义ACCESS_NETWORK_STATE权限? 但Firestore和其他第三方REST API工作正常。
以下是我的&#39; build.gradle&#39;文件。
android {
signingConfigs {
config {
keyAlias xxx
keyPassword xxx
storeFile xxx
storePassword 'xxx'
}
}
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
multiDexEnabled true
applicationId "xxx"
minSdkVersion 22
targetSdkVersion 25
versionCode 16
versionName "1.1.7"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
debug {
}
}
productFlavors {
}
}
我的&#34; proguard-rules.pro&#34;文件是空的。
以下是获取ping信息的代码。
public static String ping(String host) throws IOException, InterruptedException {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("ping -c 1 -w 3 " + host);
proc.waitFor();
int exit = proc.exitValue();
if (exit == 0) {
StringBuffer echo = new StringBuffer();
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
String line = "";
while ((line = buffer.readLine()) != null) {
echo.append(line + "\n");
}
}
return getPingStats(echo.toString());
} else if (exit == 1) {
pingError = "failed, exit = 1";
Log.e(TAG, "[CHICKEN] ping - error: " + pingError);
return null;
} else {
pingError = "error, exit = 2";
Log.e(TAG, "[CHICKEN] ping - error: " + pingError);
return null;
}
}