文章目录

  • 1、友盟QQ和QQ空间分享提示图片存储错误
  • 2、hijson格式化后缺少了一些参数
  • 3、enum少用作单例
  • 4、友盟QQ和空间分享收不到回调
  • 5、manifest中package和gradle中applicationID的区别
  • 6、org.gradle.jvmargs = -Xmx1536m
  • 7、android studio设置代理的问题
  • 8、设置阿里的jcenter地址
  • 9、studio可设置多渠道打包,为不同渠道配置不同api
  • 10、发送消息到通知栏
  • 11、构建版本变体遇见的问题
  • 12、打包aab报错
  • 13、 Caused by: ys: Subscriber class have no public methods with the @Subscribe annotation
  • 14、listview相关
  • 15、两个类实现同一个回到接口,总有一个无效


1、友盟QQ和QQ空间分享提示图片存储错误

使用友盟分享有的界面可以,有的一直提示QQ和QQ空间一直提示图片存储错误或没有存储权限,最后才发现失败的地方是因为使用了网络图片地址,而这个地址又用不了了。

2、hijson格式化后缺少了一些参数

Hijson格式化后台返回的json字符串,值为null时,自动去掉了,搞得有用的字段没写到。

3、enum少用作单例

enum一般用来定义常量

4、友盟QQ和空间分享收不到回调

友盟QQ和空间分享收不到回调,需添加

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode,resultCode,data);
}
5、manifest中package和gradle中applicationID的区别

manifest中package和gradle中applicationID的区别
1、package主要用于指定类和资源文件存放的位置。
2、applicationID是应用的唯一标识符,多渠道打包是可以为不同渠道配置不同的applicationID的,但这样他们就不是同一个应用了,更新也无法直接覆盖安装了。

如果两个不一样时,第三方SDK需要我们的包名时,要提供的是applicationID,这才是应用标识符。

6、org.gradle.jvmargs = -Xmx1536m

org.gradle.jvmargs = -Xmx1536m 是Gradle 的默认最大堆大小为 1536 MB,如果电脑很卡可以改小一点就像给studio分配内存一样。

7、android studio设置代理的问题

在studio设置页面设置代理将会使所有项目都生效,在gradle.properties中设置代理将会用于整个项目(在studio设置中设置代理会覆盖gradle.properties中的设置),如果要单独为某个module设置代理就写在模块的gradle的android{里}

apply plugin: 'com.android.application'

    android {
        ...
        defaultConfig {
            ...
            systemProp.http.proxyHost=proxy.company.com
            systemProp.http.proxyPort=443
            systemProp.http.proxyUser=userid
            systemProp.http.proxyPassword=password
            systemProp.http.auth.ntlm.domain=domain
        }
        ...
    }
8、设置阿里的jcenter地址

Google和jcenter下载过慢可以使用阿里的地址(https://maven.aliyun.com/mvn/view),按下面的形式,要什么库就引入

maven {url "http://maven.aliyun.com/nexus/content/groups/public/"}

也可以使用离线的配置,配置方法https://developer.android.google.cn/studio/intro/studio-config

9、studio可设置多渠道打包,为不同渠道配置不同api

project structure中可配置多渠道打包和为调试添加签名,多变种等

10、发送消息到通知栏

更多设置可参考

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        //适配8.0及以上需要设置NotificationChannel,且NotificationChannel的id与Notification的channelId必须相同
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(channelId, "模拟验证码", NotificationManager.IMPORTANCE_HIGH);
            notificationManager.createNotificationChannel(channel);
        }
        Notification notification = new NotificationCompat.Builder(this, channelId)
                .setContentTitle("登录验证码")
                .setContentText("登录验证码是" + stringBuilder.toString())
                .setSmallIcon(R.mipmap.ic_launcher)
                .build();
        notificationManager.notify(1, notification);
11、构建版本变体遇见的问题

1.参考链接配置构建变体 2.build type 是版本类型,默认有release和debug两个,productFlavors是产品变种(多渠道打包),他们两个组合起来就是版本变体Build varient。

为不同版本类型、产品变种、版本变体配置不同资源文件的问题(正式版和测试版切换变体就自动切换接口)
1、接口类放到各自版本下,main文件夹里不放,避免重复冲突
2、最好和以前的包结构一样,这个类要写上包路径,不然main里面引用不到

package com.example.jobdemo;  \\没有路径main包引用不到
public class WebApi {
    public static final String buildinfo = "QQ版";
}
12、打包aab报错

‘other’ has different root,需要把打包文件生成路径放到项目里面,不能是其他目录

13、 Caused by: ys: Subscriber class have no public methods with the @Subscribe annotation

原因:注册了eventbus又没有写接收的方法(或者接收的方法没有@Subscribe(threadMode = ThreadMode.MAIN))这类的标记

解决:这个activity不接收eventbus事件就不要注册,注册了就要有接收的方法。

14、listview相关

listview.addHeaderView 不设置适配器不会显示,header会触发item点击事件,适配器中返回list.size就好了,但如果有头部setOnItemClickListener的position 从HeaderView开始,添加了几个头部就占几个position

15、两个类实现同一个回到接口,总有一个无效

一个回调接口不能同时被两个类注册,比如一个回调接口被一个activity和它里面的fragment注册了,接口运行回调方法时,并不能像eventbus那样让所有注册的类都收到,要实现这个需求还是用eventbus或自己写广播。