Google Maps Android API v2 выбрасывает исключение GooglePlayServicesNotAvailableException, устарело, SupportMapFragment.getMap () возвращает ноль

Я пытаюсь включить новый Google Maps Android API v2 в приложение, используя библиотеку поддержки Android. Я'Я прошел много итераций, чтобы попытаться найти работу, и теперь я сдался и решил спросить здесь.

Я пошел в консоль API, создал проект, включил Google Maps API v2 для Android, создал отладочный KEY по мере необходимости и вставил его в манифест. Нет проблем с аутентификацией или что-то в этом роде. Я уверен, что сделал все правильно.

В моем проектеlibs папку я положилandroid-support-v4.jar (через проект щелкните правой кнопкой мыши ->Android->Добавить библиотеку поддержки ...). В Eclipse я сделал File->Import->Android->Существующий код Android в рабочую область и импортирован последний (версия 3) android-sdk / google / google_play_services / libproject / google-play-services_lib. Затем я добавил ее как библиотеку зависимостей в свой проект (правой кнопкой мыши ->свойства->Android->Добавьте его как библиотечную зависимость снизу.

В моем манифесте я имею:


    

    
    
    
    
        ...
        
        
    

В моем mainview.xml у меня есть:


Теперь на MainView.java у меня есть:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

public class MainView extends FragmentActivity ... {
    private GoogleMap mMap;

    @Override
    protected void onResume() {
        ...
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.map);
        SupportMapFragment mapFragment = (SupportMapFragment)fragment;
        mMap = mapFragment.getMap();
        //PROBLEM: mMap is null here even though mapFragment is not
    }
}

Тогда я подумал, что мне, вероятно, нужно инициализировать фрагменты, поэтому я добавил в свойonCreate после настройки просмотра содержимого:

//Fragments
FragmentManager manager = getSupportFragmentManager(); 
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.map, SupportMapFragment.newInstance());
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();

Тогда я сказал, может быть, этонеSupportMapFragment но я на самом деле должен ссылаться на фактический фрагмент, и в моемonResume Я сделал:

Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.map);
SupportMapFragment mapFragment = (SupportMapFragment)fragment;

//Fragments
FragmentManager manager = getSupportFragmentManager(); 
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.map, mapFragment);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();

mMap = mapFragment.getMap();

mMap снова нуль после этого.

Потом я увидел, что естьMapsInitializer класс, так что я подумал, может быть, я должен назвать это первым.

Поэтому я добавил код перед получением фрагмента в приведенном выше коде:

try {
    MapsInitializer.initialize(this);
} catch (GooglePlayServicesNotAvailableException e) {
    e.printStackTrace();
}

С этим LogCat сообщил о предупреждении (строка 313 являетсяMapsInitializer.initialize(this)):

com.google.android.gms.common.GooglePlayServicesNotAvailableException
    at com.google.android.gms.internal.n.c(Unknown Source)
    at com.google.android.gms.internal.n.a(Unknown Source)
    at com.google.android.gms.maps.MapsInitializer.initialize(Unknown Source)
    at myapp.activities.MainView.inflateSelectedViewAndSetData(MainView.java:313)
    at myapp.activities.MainView.onClick(MainView.java:642)
    at android.view.View.performClick(View.java:3153)
    at android.view.View$PerformClick.run(View.java:12148)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:152)
    at android.app.ActivityThread.main(ActivityThread.java:4615)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    at dalvik.system.NativeStart.main(Native Method)

В ходе моих попыток Logcat сообщал следующее предупреждение:

Google Play services out of date.  Requires 2010100 but found 1013

Это может быть виновником, но я не нашел решения.

На данный момент у меня нет идей. Я читаю несколько темВот,Вот,Вот но ни одно из предложений не решило проблему. В последнем случае они предлагают не включать зависимость проекта и просто включать файл jar. Ну, это тоже не сработало, используя либоgoogle-play-services.jar отgoogle-play-services_lib/libs папку или экспорт моей собственной банки из этого проекта.

Кстати работаю на реальном устройстве (2.3.5 и планшете с 3.2), а не на эмуляторе.

Любая помощь искренне приветствуется. :)

ОБНОВИТЬ:

Решение ниже по кубиту.

Что касается экспорта библиотечной зависимости, то нужно использовать аккуратный способ не иметь с ней дело (что является проблемой при работе с репозиториями).FatJar и экспортироватьgoogle_play_services_lib проект (который я не создал локальную копию, потому что, когда он обновляется, я нене хотите повторно импортировать), и включите выходной файл JAR в ваш проект в качестве другого файла JAR. ПРИМЕЧАНИЕ. При выборе файлов JAR для включения в JAR-файл необходимо было исключитьannotations.jar файл, поскольку он уже был предварительно включен и вызывает ошибки для дублирования. Теперь все, что мне нужно сделать, это включитьgoogle_play_services_rev_3.jar в моем проектеlibs папка и мне хорошо идти.

Ответы на вопрос(3)

Ваш ответ на вопрос