2

Я пытаюсь создать демонстрационное приложение GCM для Android в Windows 7 после «официального» учебника (http://developer.android.com/google/gcm/demo.html).Ошибка Javac при создании демонстрационного приложения GCM (Google App Engine Java/Windows 7)

В частности, я пытаюсь создать сервер с помощью Java App Engine, как описано в упомянутом учебнике:

To set up the server using a standard App Engine for Java:

  1. From the SDK Manager, install Extras > Google Cloud Messaging for Android Library. This creates a gcm directory under YOUR_SDK_ROOT/extras/google/ containing these subdirectories: gcm-client, gcm-server, samples/gcm-demo-client, samples/gcm-demo-server, and samples/gcm-demo-appengine.

  2. In a text editor, edit samples/gcm-demo-appengine/src/com/google/android/gcm/demo/server/ApiKeyInitializer.java and replace the existing text with the API key obtained above.

    Note: The API key value set in that class will be used just once to create a persistent entity on App Engine. If you deploy the application, you can use App Engine's Datastore Viewer to change it later.

  3. In a shell window, go to the samples/gcm-demo-appengine directory.

  4. Start the development App Engine server by ant runserver, using the -Dsdk.dir to indicate the location of the App Engine SDK and -Dserver.host to set your server's hostname or IP address:

    $ ant -Dsdk.dir=/opt/google/appengine-java-sdk runserver -Dserver.host=192.168.1.10 Buildfile: gcm-demo-appengine/build.xml

Я следовал за этими шагами, и я получаю следующее сообщение об ошибке:

C:\Users\p\AppData\Local\Android\android-sdk\extras\google\gcm\samples\gcm-demo-appengine>ant -Dsdk.dir C:/Users/p/appengine-java-sdk-1.8.0 runserver -Dserver.host=192.168.44.1 Buildfile: gcm-demo-appengine/build.xml 
Buildfile: C:\Users\p\AppData\Local\Android\android-sdk\extras\google\gcm\samples\gcm-demo-appengine\build.xml 

init: 

copyjars: 

compile: 
    [javac] Compiling 8 source files to C:\Users\p\AppData\Local\Android\android-sdk\extras\google\gcm\samples\gcm-demo-appengine\WebContent\WEB-INF\classes 
    [javac] C:\Users\p\AppData\Local\Android\android-sdk\extras\google\gcm\samples\gcm-demo-appengine\src\com\google\android\gcm\demo\serer\ApiKeyInitializer.java:1: reached end of file while parsing 
    [javac] AIzbSyBQdFestseFygh7Q22dxEfdsyc_k-> 
    [javac]^
    [javac] 1 error 

BUILD FAILED 

«« достигли конца файла во время разбора »- как я понимаю, эта ошибка обычно вызвана отсутствующими скобками, однако все, что я сделал, - это отредактировать файл ApiKeyInitializer.java в« Блокноте », чтобы ввести ключ API; Я не коснулся какого-либо кода! Я попытался найти решение в Интернете, но безрезультатно.

Кто-нибудь знает, что может вызвать эту проблему и как я могу ее исправить? Спасибо заранее!

+0

Пожалуйста, укажите код 'ApiKeyInitializer.java'. Вы, должно быть, сделали что-то неправильно при вводе ключа API. – Eran

+0

Привет, Эран, большое спасибо за ваш ответ. Файл ApiKeyInitializer.java не содержит никакого кода - он буквально содержит только ключ (см. (2) в цитированном тексте из учебника) - это именно то, что меня смущает ... – user2447501

+0

Если в нем содержится только ключ, это не действительный Java-файл, и вы не должны пытаться его скомпилировать (и он не должен использовать суффикс '.java'). – Eran

ответ

1

Я проверил файл ApiKeyInitializer.java (у меня он был локально на моем компьютере). Это выглядит как действительный класс Java:

/* 
* Copyright 2012 Google Inc. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); you may not 
* use this file except in compliance with the License. You may obtain a copy of 
* the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 
package com.google.android.gcm.demo.server; 

import com.google.appengine.api.datastore.DatastoreService; 
import com.google.appengine.api.datastore.DatastoreServiceFactory; 
import com.google.appengine.api.datastore.Entity; 
import com.google.appengine.api.datastore.EntityNotFoundException; 
import com.google.appengine.api.datastore.Key; 
import com.google.appengine.api.datastore.KeyFactory; 

import java.util.logging.Logger; 

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

/** 
* Context initializer that loads the API key from the App Engine datastore. 
*/ 
public class ApiKeyInitializer implements ServletContextListener { 

    static final String ATTRIBUTE_ACCESS_KEY = "apiKey"; 

    private static final String ENTITY_KIND = "Settings"; 
    private static final String ENTITY_KEY = "MyKey"; 
    private static final String ACCESS_KEY_FIELD = "ApiKey"; 

    private final Logger logger = Logger.getLogger(getClass().getName()); 

    public void contextInitialized(ServletContextEvent event) { 
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
    Key key = KeyFactory.createKey(ENTITY_KIND, ENTITY_KEY); 

    Entity entity; 
    try { 
     entity = datastore.get(key); 
    } catch (EntityNotFoundException e) { 
     entity = new Entity(key); 
     // NOTE: it's not possible to change entities in the local server, so 
     // it will be necessary to hardcode the API key below if you are running 
     // it locally. 
     entity.setProperty(ACCESS_KEY_FIELD, 
      "replace_this_text_by_your_Simple_API_Access_key"); 
     datastore.put(entity); 
     logger.severe("Created fake key. Please go to App Engine admin " 
      + "console, change its value to your API Key (the entity " 
      + "type is '" + ENTITY_KIND + "' and its field to be changed is '" 
      + ACCESS_KEY_FIELD + "'), then restart the server!"); 
    } 
    String accessKey = (String) entity.getProperty(ACCESS_KEY_FIELD); 
    event.getServletContext().setAttribute(ATTRIBUTE_ACCESS_KEY, accessKey); 
    } 

    public void contextDestroyed(ServletContextEvent event) { 
    } 

} 

Может быть, вы как-то удалил содержимое этого файла.

+0

Блестящий, спасибо! Кажется, теперь он компилируется и сообщает мне, что «Сервер приложений Dev теперь запущен». Я просто удивлен, что мне не нужно вводить ключ API где-нибудь?!? – user2447501

+1

Я думаю, вы должны ввести свой ключ API, где он говорит: '" replace_this_text_by_your_Simple_API_Access_key ". – Eran

+0

Конечно! Я забыл это, глупо обо мне. Большое вам спасибо за ваше время и терпение! – user2447501

 Смежные вопросы

  • Нет связанных вопросов^_^