服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - 关于Android Studio封装SDK的那些事儿

关于Android Studio封装SDK的那些事儿

2022-08-04 10:28AxeChen Android

这篇文章主要给大家介绍了关于Android Studio封装SDK的那些事儿,文中通过图文以及示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

前言

首先sdk是提供给别人调用的工具。所以常见的sdk都是以jar包,so库,aar包等方式导入app项目中。然后提供一些公开的api供接入方调用。所以在androidstudio中如果需要生成jar或者aar,就需要将module变成library。

1、androidstudio生成library

在这里介绍androidstudio两种生成library的方式。

1.1、两种生成library的方式

新建library module。

关于Android Studio封装SDK的那些事儿

这种会直接生成可编译成jar和aar的module。

新建android项目,然后修改app下的build.gradle

关于Android Studio封装SDK的那些事儿

将  apply plugin: 'com.android.application'修改成apply plugin: 'com.android.library'

然后去掉applicationid "com.mg.axe.helloworld"就把可运行的android module变成了一个library module。

注意:这种方式在编译前一定要做以下事情

  • 删除自定义的application和在androidmanifest.xml的配置。
  • 去点入口的activity,否则在android studio接入时会生成两个图标入口。

1.1、使用gradle所带的命令编译

这些命令可以自己在控制台使用,可以直接点开右上角的gradle直接使用。

关于Android Studio封装SDK的那些事儿

assemblerelease&assembledebug

关于Android Studio封装SDK的那些事儿

在build下的assemblerelease和assembledebug都可以生成aar包。这边和app开发很相似,可以在buildtypes下对release包做混淆等等操作。

如果编译的命令执行完毕,可以在当前module下的build文件下找到编译好的.aar文件。

关于Android Studio封装SDK的那些事儿

如果需要jar包,则只需将这个aar文件解压即可。

关于Android Studio封装SDK的那些事儿

classes.jar就是编译成jar的class文件。

1.2、aar和jar

  • .aar是适用于androidstudio的接入方式,不需要过多的考虑当sdk存在界面,图片等资源文件的情况。解压aar也可以看到,aar是一个将源码(jar)和资源文件都打包好的文件。当然也可以在eclipse中使用,前提是eclipse需要安装gradle编译环境。
  • jar只包含编译好的源代码,如果sdk包含资源文件,则需要额外导入,适用于eclipse导入;androidstudio也同样适用,不过当sdk包含资源文件时,导入aar将会更方便。

2、两种接入方式

一般情况接入方式为androidstudio和eclipse。其他的接入方式就不考虑了,可能大同小异,最主要的是其他的接入方式我也不会。

关于Android Studio封装SDK的那些事儿
手动滑稽

2.1、androidstudio接入方式

这里只介绍.aar的接入方式,androidstudio接入jar方式就不做介绍。

将.aar文件复制到项目的libs中。

并在app下的build.gradle中的android中添加如下代码

?
1
2
3
4
5
repositories{
  flatdir {
   dirs 'libs'
  }
 }

在dependencies中添加依赖的代码

?
1
2
// implementation(name: 'aar包的名字', ext: 'aar')
implementation(name: 'game_sdk', ext: 'aar')

然后点击同步(sync now),就成功的将.arr导入项目了。

可以在external libraries中找到导入的aar依赖。

关于Android Studio封装SDK的那些事儿

关于Android Studio封装SDK的那些事儿

点开aar,可以看(源代码)jar和(资源文件)res。

2.2、eclipse接入方式

eclipse一般是接入jar包的方式接入sdk,当sdk存在界面、资源文件时,接入方式比androidstudio接入aar稍微麻烦点,需要将jar包和资源文件分开导入。

  • 解压aar文件。
  • 将jar包复制到libs文件加下,并添加依赖(add to path) 。
  • 如果有资源文件,则需要将res下的资源文件复制到项目对应的位置。
  • 如果sdk用到了activity等组件,还需去注册等,这些都应在sdk接入文档中指明清楚。

2.3、两种接入方式都需要注意的问题

在sdk中声明的权限,制定的android版本范围等都要在sdk接入文档中指明清楚。

3、可能踩的坑

3.1、资源文件无法获取的问题。

如果编译好的jar中使用了资源文件,然后使用了r.xx.xx这样的代码,可能会出现这样的异常。

?
1
java.lang.noclassdeffounderror: failed resolution of: lcom/ysyc/axechen/r$id

找不到id。最后是参照开源的typesdk才解决了这个问题。通过如下的方法去寻找id。

?
1
2
3
4
5
public class getresid {
 public static int getid(context context, string paramstring1, string paramstring2) {
  return context.getresources().getidentifier(paramstring2, paramstring1, context.getpackagename());
 }
}

加载布局和控件的方法:

?
1
2
3
4
5
// 获取布局id
getresid.getid(this, "layout", "activity_main")
 
// 获取控件id
getresid.getid(this, "id", "login")

3.2、三方包冲突问题

如果sdk用到了三方库,然后接入方的项目中也用到了同样的三方库,那么当编译的时候就会出现类冲突,无法编译通过。这个时候就要求在编译sdk时不要将三方的依赖编译到sdk的jar中。那么在添加依赖时需要使用compileonly关键字。

?
1
compileonly files('libs/gson-2.8.5.jar')

或者

?
1
compileonly 'com.google.code.gson:gson:2.8.5'

这样才不会将引入的依赖编译到sdk的jar中,这个时候需要接入方导入这些依赖,当然sdk的接入文档要详细说明。

3.3、请使用最平常的api和习惯

最好不去使用一些新的特性。如果接入方没有使用到这些特性,可能编译无法通过,尤其是eclipse接入时会出现更多问题。我遇到的问题:我在编译sdk时就是因为使用了lamada表达式导致eclipse无法编译通过。

4、混淆

sdk的混淆和做app的混淆是一样的。

?
1
2
3
4
5
6
buildtypes {
   release {
     minifyenabled true
     proguardfiles getdefaultproguardfile('proguard-android.txt'), 'proguard-rules.pro'
   }
 }

在混淆的时候,如果使用了三方库,三方库混淆的要求同样需要加上混淆。
如果接入方需要做混淆,请记住加上sdk的混淆要求和三方库的混淆要求。免得sdk的代码混淆之后又被接入方混淆导致出错。

5、关于sdk的其他解决方案

实际上,用原生的界面做sdk并不是非常好的解决方案,主要是不利于sdk的更新和跨平台。最好的方式是加载h5,更新起来更方便,sdk实现起来更简单。

6、一些开源的sdk

https://github.com/typesdk/typesdk

https://github.com/zuowutan/sharegamesdk

注意事项:

1.所有的内容都需要依赖这个acitivity.他是sdk上下文.

2.sdk的所有内容围绕着这个activity来写就行了

3.把这个activity当成一个普通类使用

4.sdk最大的问题就是它里面的所有内容都是没有生命周期的.

5.只有之前创建声明过的那个activity 有生命周期.原理大概是这样的,其他的自己查资料.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:https://www.jianshu.com/p/4d092c915ef1

延伸 · 阅读

精彩推荐