Android SDK研发解决方案宝典

Android SDK研发很难整,非常烧脑,与app研发有很多不同。
遇到的问题有很多,各种崩溃,各种空指针,各种冲突需要解决。
所以开发前一定要提前规划好,做好规范。我把我这边一些问题做了记录和分享。
问题1:
Caused by: android.view.InflateException: Binary XML file line #47 in cn.qianlan.my11111:layout/fragment_option_deposit: Error inflating class <unknown> Caused by: java.lang.reflect.InvocationTargetException
解决方向:
1,layout中涉及到?attr/bg_color等该种引用主题的方式引起。
2,style="@style/wrap_style"方式也有可能影响
3,还有就是在activity中setTheme(R.style.OptionAppTheme);与宿主app冲突。
去掉关于主题一切引用,和主题的设置。
sdk不能进行黑白主题切换,会对宿主app有影响。

问题2:context.getPackeName的时候报空指针
解决方向:最好使用application的上下文去取,而不是getContext

问题3:资源问题
sdk资源名与宿主app资源名称重复了,导致优先会去拿宿主app的资源名称,导致显示不对。即使配置gradle的资源前缀也不好使。比如color等。最好是在资源前面加前缀。做好sdk开发规范。
如:java.lang.RuntimeException: Unable to start activity ComponentInfo{io.transi.im.wallet/cn.xm.optionsdk.view.HomeActivity}: java.lang.NullPointerException:Attempt to invoke virtual method 'void com.flyco.tablayout.CommonTabLayout.setTabData(java.util.ArrayList)' on a null object reference
就是资源问题,使用了他们同名的资源。

问题4:那就三方库的冲突问题。
解决方法:
1,扒源码,直接去github拿源码是不错的方式,可以避免很多问题。
2,使用插件,将源码打成包,打到SDK中去。但是宿主app如果有引用相同的包,依然会冲突。

classpath 'com.github.kezong:fat-aar:1.3.8' //工程gradle引入

apply plugin: 'com.kezong.fat-aar'//moudle的gradle引入插件
//图片加载,打包前
embed 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

3,那就是如果宿主app有相同的三方库,那就同步版本号,只要版本号同步,sdk也可以使用。如果版本号无法同步,那就让宿主app引入三方库。

问题5:混淆问题
解决方向:要注意,要对外暴露接口和类方法是不能进行混淆的,对方会找不到。

问题6:定制接口的问题
解决方向:接口问题最好是有很好的规范和协商,一切从简。

问题7:有的三方库需要V4或V7包
解决方向:在gradle.properties中引入android.enableJetifier=true即可支持v4或v7

问题8:打包问题
解决方向:
一般打成aar的包,只要如图
在这里插入图片描述
但是最好的还是要去上传到maven,这样别人也方便去使用
maven仓库最好是找个找后端的开发大佬去要一个,自己搭建很麻烦。
比如给了一个地址:

NEXUS_REPOSITORY_URL=http://XXXXXXXXXXXXXX

建一个叫aar_upload.gradle的文件放到工程目录上内容如下,可以直接复制去使用:

apply plugin: 'maven'
def getRepositoryUserName() {
    return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
def getRepositoryPassword() {
    return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: NEXUS_REPOSITORY_URL) {
                authentication(userName: getRepositoryUserName(), password: getRepositoryPassword())
            }
            pom.project {
                name POM_NAME
                version POM_VERSION
                artifactId  POM_ARTIFACTID
                groupId  POM_GROUPID
                packaging  POM_PACKAGING
                description  POM_DESCRIPTION

                scm {
                    url POM_SCM_URL
                    connection POM_SCM_CONNECTION
                    developerConnection POM_SCM_DEV_CONNECTION
                }
                licenses {
                    license {
                        name POM_LICENCE_NAME
                        url POM_LICENCE_URL
                        distribution POM_LICENCE_DIST
                    }
                }
                developers {
                    developer {
                        id POM_DEVELOPER_ID
                        name POM_DEVELOPER_NAME
                    }
                }
            }
        }
    }
}

然后在需要打包的moudle中的gradle.properties添加如下配置:

#??maven??
POM_NAME=optsdk
POM_VERSION=1.0.51-SNAPSHOT
POM_ARTIFACTID=option
POM_GROUPID=cn.aa.optsdk
POM_PACKAGING=aar
POM_DESCRIPTION=optionsdk_lib_one
#licence??
POM_LICENCE_NAME=The Apache License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo
#???
POM_SCM_URL=https://github.com/
POM_SCM_CONNECTION=""
POM_SCM_DEV_CONNECTION=""
#?????
POM_DEVELOPER_ID=sf
POM_DEVELOPER_NAME=shenfei
#??? maven仓的用户 密码 以及 maven地址
NEXUS_USERNAME=admin    
NEXUS_PASSWORD=admin123
NEXUS_REPOSITORY_URL=http://XXXXXXXXXX/

使用方式:工程gradle的repositories 下添加

repositories {
maven {
            allowInsecureProtocol(true)
            url 'http://XXXXXXXX'
        }
        }

然后再gradle中引入

api 'cn.aa.optsdk:option:1.0.51-SNAPSHOT' 

注意点:要携带SNAPSHOT标志,有兴趣的可以google查一查。
有点maven地址需要携带,有的不要携带,不然无法上传到仓库的,需要检查。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值