将 Android Studio 和 SDK 更新到 22。现在,当尝试打开地图片段时,它会崩溃

Posted

技术标签:

【中文标题】将 Android Studio 和 SDK 更新到 22。现在,当尝试打开地图片段时,它会崩溃【英文标题】:Updated Android studio and SDK to 22. Now when trying to open a map fragment it crashes 【发布时间】:2015-10-07 05:11:15 【问题描述】:

这是我的清单权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="nl.hgrams.passenger.C2D_MESSAGE" />

这是我的活动:

 @Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);
    ButterKnife.inject(this);
    mSearchFragment = new PSSearchFragment();
    mMapFragment = new PSMapFragment();

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.add(R.id.fragmentContainer, mSearchFragment, TAG_SEARCH);
    transaction.add(R.id.fragmentContainer, mMapFragment, TAG_MAP);
    transaction.hide(mMapFragment);
    transaction.commit();

    mCurrentFragment = mSearchFragment;

其中有一个 FrameLayout,我在其中加载 Fragments:

    <FrameLayout
    android:id="@+id/fragmentContainer"
    android:layout_
    android:layout_/>

这是我的地图片段:

<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.MapFragment"
    android:layout_
    android:layout_/>

<LinearLayout
    android:id="@+id/display_button"
    android:visibility="gone"
    android:layout_
    android:layout_
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom|center_horizontal"
    android:background="#88FFFFFF">

    <Button
        android:id="@+id/display_markers"
        android:layout_
        android:layout_
        android:layout_margin="@dimen/text_medium_padding"
        android:background="@drawable/rounded_button_green"
        android:text="@string/display_location_markers"
        android:textColor="@color/white" />
</LinearLayout>


<TextView
    android:id="@+id/display_message"
    android:visibility="gone"
    android:layout_
    android:layout_
    android:gravity="center_horizontal"
    android:padding="10dp"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom|center_horizontal"
    android:text="@string/long.press.tooltip"
    android:background="#88FFFFFF">
    </TextView>


<nl.hgrams.passenger.ui.AnimatedImageView
    android:id="@+id/loader_container"
    android:layout_
    android:layout_
    android:layout_centerInParent="true"
    android:background="@drawable/loading_animation"
    android:visibility="invisible" />

这是我的 mapFragment 的 OnCreateView:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        try
            View view = inflater.inflate(R.layout.fragment_map, container, false);
            ButterKnife.inject(this, view);
            if(!PSLocationCenter.getInstance().mLocationClient.isConnected()) 
                PSLocationCenter.getInstance().startLocationClient();
            
            gson = new GsonBuilder()
                    .setExclusionStrategies(new ExclusionStrategy() 
                        @Override
                        public boolean shouldSkipField(FieldAttributes f) 
                            return f.getDeclaringClass().equals(RealmObject.class);
                        

                        @Override
                        public boolean shouldSkipClass(Class<?> clazz) 
                            return false;
                        
                    )
                    .create();
            return view;
        catch (Exception e)
            Log.i("","errror in map fragment" + e.getMessage());
            getActivity().startActivity(new Intent(getActivity(), PSSearchActivity.class));
            getActivity().finish();
            return null;
        

    

我在尝试打开活动时收到以下错误:

 Asset path '/system/framework/com.android.media.remotedisplay.jar' does not exist or contains no resources.
 Asset path '/system/framework/com.android.location.provider.jar' does not exist or contains no resources.

我尝试使用:

android:name="com.google.android.gms.maps.SupportMapFragment"

代替:

android:name="com.google.android.gms.maps.MapFragment"

然后它崩溃了:

  View view = inflater.inflate(R.layout.fragment_map, container, false); 

错误:二进制 XML 文件第 8 行:膨胀类片段时出错

进入 try catch 并且不显示任何内容。 知道我做错了什么吗?我更新了 SDK 工具管理器中的所有内容,甚至更新了 google api。尝试使用旧版本的播放服务,尝试返回构建工具 21.0.1 但同样的事情:(

Build.gradle 文件:

android 
    compileSdkVersion 22
    buildToolsVersion '22.0.1'
    defaultConfig 
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 291
        versionName '1.5.0'
        multiDexEnabled true
    
    dexOptions 
        preDexLibraries = false
        javaMaxHeapSize "2g"
    
    packagingOptions 
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    
    buildTypes 
        release 
            ext.enableCrashlytics=true
            ext.betaDistributionReleaseNotesFilePath="/Users/gopublic/bamboo-home/xml-data/build-dir/131073/PAS-PAD-VRANDROID/changelog.txt"
            ext.betaDistributionEmails="alin.rosu@100grams.nl, pedro.amanhui@100grams.nl, 100gramstest@gmail.com"
            ext.betaDistributionGroupAliases="passenger-android-beta"

        

        debug
            ext.enableCrashlytics=true
            ext.betaDistributionEmails="alin.rosu@100grams.nl, pedro.amanhui@100grams.nl, 100gramstest@gmail.com"
            ext.betaDistributionReleaseNotesFilePath="/Users/gopublic/bamboo-home/xml-data/build-dir/131073/PAS-PAD-VRANDROID/changelog.txt"
            ext.betaDistributionGroupAliases="passenger-android-beta"

        
    


dependencies 
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.+'
compile 'com.android.support:multidex:1.0.0'
compile 'com.google.code.gson:gson:2+'
compile 'com.android.support:cardview-v7:22.0.+'
compile 'com.android.support:recyclerview-v7:22.0.+'
compile 'com.mcxiaoke.volley:library:1.0.+'
compile 'com.jakewharton:butterknife:4.0.+'
compile 'com.squareup.okhttp:okhttp:2.0.0+'
compile 'com.google.android.gms:play-services:+'
compile 'com.github.chrisbanes.actionbarpulltorefresh:library:+'
compile 'com.tonicartos:stickygridheaders:1.0.1@jar'
compile 'com.prolificinteractive:parallaxpager:0.8.0'
compile files('libs/nineoldandroids-2.4.0.jar')
compile files('libs/gcm.jar')
compile files('libs/okhttp-urlconnection-2.0.0.jar')
compile project(':libraries:facebook')
compile 'com.edmodo:cropper:1.0.1'
compile 'com.squareup.picasso:picasso:2.3.3'
compile 'com.makeramen:roundedimageview:1.3.0'
compile 'com.androidplot:androidplot-core:0.6.1'
compile 'com.google.maps.android:android-maps-utils:0.3+'
compile 'com.instabug.library:instabugsupport:1+'
compile 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
compile 'io.realm:realm-android:0.80.+'
compile('com.crashlytics.sdk.android:crashlytics:2.2.3@aar') 
    transitive = true;

compile files('libs/easyandroidanimationslibrary-v0.5.jar')

【问题讨论】:

你能发布你的build.gradle文件吗? 确定,现在编辑 10x,用于编辑,第二次检查清单,因为我发现它的格式不太好 @rosualin 你找到解决方案了吗? 我改回 21.1.2 是我没记错,并删除了 1 个导致主题被定义两次的库,然后它工作了,然后当我更新时它消失了,我我现在在 25 岁,已经有一段时间了。 【参考方案1】:

我也遇到过同样的问题。试试这个compileSdkVersion 21 buildToolsVersion '21.1.2' 而不是22.0.1。版本22.0.1 不是纯稳定的

【讨论】:

用 21.1.2 尝试过同样的问题。甚至试图强迫它使用旧版本的播放服务,但没有运气。没有更多的想法。等待答案,同时,开始将我的代码转换为使用 2 个活动而不是 1 个活动和 2 个片段,因为地图在活动中工作。 supportMapFragment 或 MapFragment 存在问题。不知道是什么,还没有 你使用过 import android.support.v4.app.FragmentActivity 吗? 使用 supportMapFragment 代替 MapFragment(我知道你已经尝试过) 使用这个编译 'com.google.android.gms:play-services:5.0.89' 而不是编译 'com.google.android.gms:play-services:+' 我收到此错误:/Users/alinrosu/Workspace/passenger-android/passenger/src/main/res/values/colors.xml 错误:(2) 属性“主题”已定义即使我的colors.xml文件中没有“主题”,wtf?

以上是关于将 Android Studio 和 SDK 更新到 22。现在,当尝试打开地图片段时,它会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

android studio 怎么更新sdk

在Android Studio中更新Android SDK API 28时出现问题

mac android studio怎么更新sdk manager

Android Studio 问题:为啥即使我已经更新到 SDK 22,它仍然会报错?

Android Studio 2.3 sdk 管理器选项卡灰显

Android Studio 2.3 sdk 管理器未打开