安卓架构师开发进阶Android开发

安卓常见错误

2019-04-15  本文已影响8人  默默_大魔王

1:同一部手机同时安装两个同样的app。

第一种解决方法:

因为安卓是根据不同app的包名来区分是不是同一个app的,包名不同,手机就认为,两个app是完全不同的两个app,修改包名就可以。

有时候我们是同一套代码,打一个测试包debug和release包,原先是装在两个不同的手机上,一边看测试版本,一遍看正式版本,现在就有一个需求,一个手机同时装上这两个版本确实方便了很多,但是,我们写代码总不能来回修改包名吧,不现实。

第二种解决方法:

安卓给我们提供了一个applicationid,如果没有手动写这个id,默认是包名,如果自己写了一个与包名不同的id,app包名默认就是这个id,安卓还给我们提供了一个applicationIdSuffix,就是在buildtype下面的debug里面加上applicationIdSuffix值为“.XX”就可以了,这个后缀会添加到applicationid,这样app的debug包就是com.xx.xx.xxx.XX了,这样就跟release版本的包是两个不同的app了

代码如下:

buildtype{

release{

proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

}

debug{

applicationIdSuffix ".debug"

}

}

4:如果安装不上,提示同一个内容观察者冲突,就根据网上说的,修改一下provider的authorities值,这个provider在清单文件里面配置的,直接搜,authorities默认情况下是包名,修改成动态的就可以了

```

      android:name="com.rd.epinggu.util.MyProviderUnq"

      android:authorities="${applicationId}.provider.MyProviderUnq"

      android:exported="false"

      android:grantUriPermissions="true">

          android:name="android.support.FILE_PROVIDER_PATHS"

          android:resource="@xml/file_paths" />

  </provider>

```

     

这个搜一下网上全是解决方案,但是没能解决我的问题,what,纠结了好几天,网上也没有其他解决方案,全是让修改authorities值的,但是我debug和release两个包的authorities是不一样的啊,我还特意用android  studio打开两个apk,对比了两个清单文件,并确定是不一样的,最终解决方案:

```

其实上面的已经可以解决90%以上的问题了,之所以没解决我的问题,是因为我这里代码的原因,因为我是接手别人的代码,他的buildtype下面的 release和debug下面分别配置了manifestPlaceholders,并且在厘main配置了

JPUSH_PKGNAME “com.test.xxx”,而且debug和release的JPUSH_PKGNAME参数值是一样的,修改了一下,卧槽,这的可以同时安装两个了

```

代码如下:

```

buildTypes {

release {

minifyEnabled false

        debuggable false

        proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

        manifestPlaceholders = [

JPUSH_PKGNAME:"com.rdg.epg",

JPUSH_APPKEY :"12121212121212",//JPush 上注册的包名对应的 Appkey.

                JPUSH_CHANNEL:"developer-default",//暂时填写默认值即可.

                app_name:'@string/app_name_release',

app_icon:'@drawable/logo'

        ]

resValue"string","app_name","@string/app_name_release"

        buildConfigField"Boolean","IS_RELEASE_URL","true"

    }

debug {

applicationIdSuffix ".debug"

        resValue"string","app_name","@string/app_name_debug"

        buildConfigField"Boolean","IS_RELEASE_URL","false"

        manifestPlaceholders = [

JPUSH_PKGNAME:"com.rdg.epg.debug",

JPUSH_APPKEY :"34343434343434",//test appkey.

                JPUSH_CHANNEL:"developer-default",//暂时填写默认值即可.

                app_name:'@string/app_name_debug',

app_icon:'@drawable/debug_logo'

        ]

}

}

```

搞定,之所以记录一下是因为网上千篇一律的修改provider,根本没人提到第三方的配置,但是可能也很少有人这么写吧,总之记录一下,如果帮你你了别忘了点个赞哦!!

上一篇下一篇

猜你喜欢

热点阅读