简述Android SDK制作流程

Posted 仲长可倾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简述Android SDK制作流程相关的知识,希望对你有一定的参考价值。

  1. SDK“坑不坑”?
  2. SDK“难不难”?
  3. 如何封装用户接口? 
  4. android Studio 打包混淆aar

1 . SDK“坑不坑”? 
没有接触过SDK研发的人可能不觉得,SDK研发费时费力,并且没有什么成就感。你写的做的,最终结果你并不能看到。最重要的是,一个SDK完成后,你会感觉到居然什么都没有得到?(有点小夸大哦)当对于普通的APK研发,SDK还是比较坑的。


2 . SDK“难不难”? 
在eclipse时代,怎么加载类?怎么加载资源?怎么让开发者更快更简单的接入?还是比较困难的。


3 .如何封装用户接口? 
以上两点都是在扯。言归正传,如何让自己的SDK更安全?让自己的逻辑对用户完全透明? 
* 利用好混淆 
* 建造者模式 
先看下我SDKdemo的目录结构 

技术分享


总体的架构采用MVP。最近超喜欢用这种模式,比MVC更好理解,解耦性更好,就是接口写的多了点。重点看admin包。这个包的主要功能是暴露给用户的。也就是说SDK中一切提供给用户的API接口都写在这个包中。当混淆时候只忽略这一个包即可。建造者模式构建用户接口,优缺点不必多说。唯一重点想提的一个小细节。

 

 @Override
    public void GoToActvity(Context context) {
        if (Constant.sdkInstance.getUserAppName() == null)
            throw new IllegalArgumentException("UserAppName can not be null");
        if (Constant.sdkInstance.getUserChannel() == null)
            throw new IllegalArgumentException("UserChannel can not be null");
        if (Constant.sdkInstance.getUserKey()==null)
            throw new IllegalArgumentException("UserKey can not be null");
        Intent intent = new Intent(context, SdkActivity.class);
        context.startActivity(intent);
    }

像这种异常一定要跑出来让接入者看到,会让你省去很大麻烦。demo我会在最后贴出下载地址。 


4.Android Studio 打包混淆aar 
首先配置混淆,在你的SDK项目build.gradle中配置,如图 

技术分享


其次配置你的proguard-rules.pro文件,这里提供一个模版哦,http://www.jianshu.com/p/f3455ecaa56e 非常不错。然后就可以生成aar包了,第一你可以运行下项目(这种太low)。或者你可以在控制台下输入gradlew如图。 

技术分享


最终你的aar会生成在这里。。。上图


技术分享

 

对了,如何使用aar那?


技术分享 


具体代码详情请看github 转载:David_DYK

 下载地址:https://github.com/duanyikang/Develop-SDK














以上是关于简述Android SDK制作流程的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android屏幕上识别视图移动?

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

自己制作Android包括@hide接口的SDK

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

将 Android Studio 和 SDK 更新到 22。现在,当尝试打开地图片段时,它会崩溃