简体   繁体   English

Google Cloud Endpoints需要Android SDK级别11或更高

[英]Google Cloud Endpoints require Android SDK level 11 or more

It seems that GCP's Endpoints are not compatible with anything below Honeycomb, is there a way to make them backward compatible? GCP的端点似乎与Honeycomb之下的任何内容都不兼容,是否有办法使它们向后兼容?

Regarding the error I receive in the logcat: 关于我在logcat中收到的错误:

10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ java.lang.IllegalArgumentException: running on Android SDK level 10 but requires minimum 11
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:119)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:69)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at com.google.api.client.extensions.android.AndroidUtils.checkMinimumSdkLevel(AndroidUtils.java:48)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at com.google.api.client.extensions.android.json.AndroidJsonFactory.<init>(AndroidJsonFactory.java:75)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at {package}.fragment.StartFragment$RegistrationLoader.loadInBackground(StartFragment.java:144)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at {package}.fragment.StartFragment$RegistrationLoader.loadInBackground(StartFragment.java:120)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:242)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:51)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:40)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:123)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:138)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
10-06 15:21:33.950    2330-2358/{package} W/System.err﹕ at java.lang.Thread.run(Thread.java:1019)

I get the exact same error on my android app. 我在我的android应用上得到了完全相同的错误。 So I looked at the class AndroidJsonFactory and here it is: 因此,我查看了类AndroidJsonFactory,它是:

@TargetApi(11)
@Beta
public class AndroidJsonFactory extends JsonFactory {

public AndroidJsonFactory() {
    AndroidUtils.checkMinimumSdkLevel(11);
}

This comes from: 来自:

compile('com.google.http-client:google-http-client-android:1.18.0-rc') {
        exclude(group: 'com.google.android', module: 'android')
}

in your gradle build file. 在您的gradle构建文件中。

Here is something that seem to work for me. 这似乎对我有用。

add

compile 'com.google.http-client:google-http-client-gson:1.19.0' exclude module: 'httpclient'

to your gradle build file and the following in to your code: 到您的gradle构建文件中,并在代码中添加以下内容:

/**
 * Class instance of the JSON factory.
 */
public static final JsonFactory getJsonFactory() {
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        // only for honeycomb and newer versions
        return new AndroidJsonFactory();
    } else {
        return new GsonFactory();
    }
}

Then use the getJsonFactory() - method wherever you build your backend service handler. 然后,无论您在哪里构建后端服务处理程序,都使用getJsonFactory()-方法。 I'll do a little more testing but I think this should work. 我将做更多测试,但我认为这应该可行。

According to GCP Java tutorial , you can create endpoints using API 9: Android 2.3 (Gingerbread) for the Minimum required SDK. 根据GCP Java教程 ,您可以使用API​​ 9:Android 2.3(姜饼)来创建最低要求的SDK。 Which means it should support at least gingerbread devices. 这意味着它至少应支持姜饼设备。 It might be a problem generating the clients or an inconsistency in the GCP Java Documentation. 生成客户端可能是问题,或者是GCP Java文档中的不一致。 I've generated clients using Maven Plugin for Eclipse. 我已经使用Maven Plugin for Eclipse生成了客户端。 I'll try to generate clients with Android Studio to see if it makes any difference. 我将尝试使用Android Studio生成客户端,以查看它是否有所不同。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM