关于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。

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

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

将  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直接使用。

assembleRelease&assembleDebug

在build下的assembleRelease和assembleDebug都可以生成aar包。这边和APP开发很相似,可以在buildTypes下对release包做混淆等等操作。

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

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

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。其他的接入方式就不考虑了,可能大同小异,最主要的是其他的接入方式我也不会。


手动滑稽

2.1、AndroidStudio接入方式

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

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

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

repositories{
  flatDir {
   dirs 'libs'
  }
 }

在dependencies中添加依赖的代码

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

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

可以在External Libraries中找到导入的aar依赖。

点开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这样的代码,可能会出现这样的异常。

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/ysyc/axechen/R$id

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

public class GetResId {
 public static int getId(Context context, String paramString1, String paramString2) {
  return context.getResources().getIdentifier(paramString2, paramString1, context.getPackageName());
 }
}

加载布局和控件的方法:

// 获取布局id
GetResId.getId(this, "layout", "activity_main")

// 获取控件id
GetResId.getId(this, "id", "login")

3.2、三方包冲突问题

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

compileOnly files('libs/gson-2.8.5.jar')

或者

compileOnly 'com.google.code.gson:gson:2.8.5'

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

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

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

4、混淆

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

 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 有生命周期.原理大概是这样的,其他的自己查资料.

总结

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

(0)

相关推荐

  • Win8下Android SDK安装与环境变量配置教程

    Win8下Android SDK的安装与环境变量配置,具体内容如下 1.下载Android SDK,点击安装,直接默认路径即可! 进入该网站后往下拉就能找到sdk下载的位置,选择图中红圈的程序进行下载 2.安装过程比较简单,按照平时安装软件的方式来就行,默认路径安装后,安装完成,开始配置环境变量. 3.打开计算机属性--高级系统设置--环境变量 4.新建一个系统变量,变量名:ANDROID_HOME,变量值:C:\Program Files \android-sdk(以你安装目录为准,确认里面有

  • 利用百度地图Android sdk高仿微信发送位置功能及遇到的问题

    接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 我在实现这个功能的时候,遇到一些困难,可能也是别人将会遇到的困难,特在此列出 1.在微信发送功能中,不管用户如何拖拽地图,总有个覆盖物固定了MapView中央,怎么实现? 其实这很容易实现,只要MapView的布局文件中,将一个ImageView覆盖在MapView的中央,就能够实现不管用户如何拖拽地图,覆盖物(ImageView)总固定总MapView中央 2.如何获取MapView中央

  • 配置Android SDK

    下载Android SDK 两种方式: (1)官网下载(需翻墙):https://developer.android.com/studio/index.html (2)国内下载地址(无需翻墙):http://www.androiddevtools.cn/ 配置步骤 启动 Android SDK Manager ,打开主界面 在以下界面中选择: 然后install 配置环境变量 右键我的电脑,打开属性,点击高级系统设置,打开环境变量: 1.新建一个环境变量名称为ANDROID_HOME,变量值为当

  • centos7中安装Android SDK的方法步骤

    本文介绍了centos7中安装Android SDK的方法步骤,分享给大家 0x01 下载sdktools cd /opt mkdir androidSdk wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip unzip sdk-tools-linux-3859397.zip 0x02 配置命令 打开 /opt/profile 添加sdk命令如下: ... export PATH USER LOGNA

  • Android Studio设置或修改Android SDK路径方法

    不少朋友自己下载了一个Android SDK,怎样在Android studio中默认的Android SDK路径呢? 打开Android studio,点击"File"菜单下的"Other Settings",接着点击"Default Project Structure"选项. 2.这时就会看到SDK Location,点击图示第二个红色区域的图标,就可以修改默认的AndroidSDK路径. 1.修改SDK路径方法/步骤2 点击"Fi

  • Android中封装SDK时常用的注解总结

    前言 在工作中我们经常需要将功能模块封装成库供合作厂商调用, 如何写好一个健壮的Android Library有很多讲究,使用注解可以对SDK暴露给开发者的接口做出一些限制,从而尽可能地避免开发者错误地使用API. 下面我们介绍几种封装SDK时常用到的注解,需要的朋友们可以参考学习. 一.IntDef与StringDef 我们有时候会使用int常量或者String常量来代替枚举, 特别在你编写SDK的时候,你可以通过IntDef或者StringDef来限制接口可接受的参数. 比如,有一个 dis

  • 关于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. 这种会直接生成可编译成jar和aar的module.

  • Android studio 2020中的Android SDK 下载教程

    1.为了避免sdk到处找麻烦,我这边直接给你提供一个sdk 云盘下载: 链接: https://pan.baidu.com/s/1ttkUMuEW1pNg9Qx391rE7Q 提取码: nfj6 2.将sdk下载下来解压,在Android studio File->Setting->Android SDK Location中添加该解压的路径,如下图.(我这个适用window的) 3.我这个sdk,有点老,只到Android 5.0,需要配置更新,勾选Force https://......复选

  • Android Studio配置本地SDK的方法

    Android Studio配置本地SDK 问题一:Android Studio报错:SDK does not contain any platforms. 解决方法:本地SDK应放到名为platforms的外层文件夹内. 例子:D:\SDK\platforms- (选择路径时选取到SDK文件夹即可) 问题二:Android SDK location should not contain whitespace, as this can cause problems with the NDK to

  • 详解如何在Android studio中更新sdk版本和build-tools版本

    一.首先看下Android开发用到的sdk目录: build-tools 保存着一些Android平台相关通用工具,比如adb.和aapt.aidl.dx等文件.  aapt即Android Asset Packaging Tool , 在SDK的build-tools目录下. 该工具可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk). 也可将资源文件编译成二进制文件.  Adb 即android debug bridge 管理模拟器和真机的万能工具,ddms 调试环境 

  • Android Studio打包H5网址页面,封装成APK

    目录 一.下载 AndroidStudio 二.新建项目 三.配置项目 MainActivity WebViewClient AndroidManifest.xml 一.下载 AndroidStudio 自行下载安装,https://developer.android.google.cn/studio/#downloads 二.新建项目 三.配置项目 MainActivity package com.lmm.myapp; import android.support.v7.app.AppComp

  • 图解Windows环境下Android Studio安装和使用教程

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试. 最近,Google 已宣布,为了简化 Android 的开发力度,以重点建设 Android Studio 工具,到今年年底将停止支持Eclipse等其他集成开发环

  • Android Studio导入项目非常慢的解决方法

    Android Studio原生支持使用Gradle来构建项目,使用动态语言Groovy定义项目构建的过程,避免了build.xml文件繁琐的定义. 然而使用的时候,却有着巨大的缺陷.由于Android Studio在升级的时候,可能会伴随着Gradle版本的升级,Gradle就会产生若干的版本. 为了保证程序不会因为Gradle版本不同导致问题,又产生了Gradle Wrapper,它的作用就是让项目绑定一个Gradle版本,当我们导入项目时,会自动下载相应的Gradle版本. 问题来了 这就

  • Android Studio安装配置方法图文教程

    本文主要讲解安装AndroidStudio和配置环境变量遇到一些问题,以及解决方法. 需要的软件:AndriodStudio安装包.java SE Development Kit(JDK) 安装AndroidStudio很简单,只需要执行安装包,并选择需要的目录,进行安装就可以了 在这里,简单的介绍一下jdk安装和环境变量的配置: 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不

  • Android Studio 1.2版安装设置图文教程

    这两天Google更新了Android Studio 1.2正式版,新版本的设置界面大变面,设置条目较旧版本进行了归类,不像以前那样列表长长的了. 趁着安装新版本的机会,把常用的设置记录一下,放到博客里面,以作备忘. 下载 正式版的Android Studio和SDK可以在下面的链接进行下载 http://developer.android.com/sdk/index.html 关于下载,我建议下载绿色版的Android Studio和SDK,别下安装包版捆绑版的,这样如果有哪个出了问题要重装,

随机推荐