sdk开发项目心得

这是博主第一次sdk开发工作,是开发过程中的感悟和心得,写得不好,还请指正

公司背景是一家专门从事sdk开发服务的公司,这次楼主接到sdk开发的任务,项目经理告知说可以依靠之前公司的sdk进行修修改改就可以完成任务,楼主就这么做了,可是做到后期项目需求变化发现公司之前的sdk根本不能用了,但是项目也进行了一大半,所有就在之前的代码框架下完成,到项目后期功能全部完成后,才发现有大问题;
sdk框架前期没有经过合理的设计,导致sdk内部许多代码逻辑会暴露给客户,暴露了sdk的安全问题,所有在次提醒,在进行开发之前一定要做好框架的设计,一个好的框架也就标志着一个好的项目
项目功能都开发完了,时间也紧迫,博主为了补救项目的缺失,把代码内部的逻辑能修理的尽量修理了,最后实在不能掩藏,就进行代码混淆和将代码写入到jni里面去,这样解决后,虽然不能保证能完全解决问题,但是还是从一定程度上为代码加了一道安全锁

以下是在开发过程中遇到问题时的感悟

代码框架设计

楼主认为框架设计的目的是:

  1. 将整个项目合理的拆分为许多模块,各个模块功能职责明确,降低各个模块的依赖,耦合;做到想用某一个模块时就用,不用时就去除掉,并且不影响其他模块
  2. 合理设计类与类之间的继承关系,接口的实现关系,和利用java的public、private、protected、default权限,来掩藏代码内部逻辑,争取做到只暴露外部开发接口,完全掩藏内部逻辑

楼主认为:
以功能为单位划分模块,无论功能大小均划分成模块,方便后期代码升级可以进行添加;

模块设计准则:

a. 模块设计准则:在一个功能模块下,放于同一个package下,根据功能点为这个模块创建一个接口,创建两个功能管理类并实现前面的该接口,一个用于对外部模块开放接口,另一个用于控制模块内部逻辑。最后,在将模块内部真正实现的代码逻辑类全部设置为default权限,保证package以外的无法访问;如下图:

![模块设计](http://upload-images.jianshu.io/upload_images/4442190-ef960c0e29c61c03?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

b. 类与类的继承、接口实现;如果有多个相同的功能的代码块,都为其写一个基类,子类来继承即可;接口方面,如果多个类有相同的功能,但实现不一样则就用接口来实现(ps这块了解的不多,有高见还请赐教)
其他的安全、代码冗余等问题也是老生常谈的问题,也需要去合理设计

总结下来也就是面向对象设计的几大原则:

  • 优化代码的第一步 —— 单一职责原则
  • 让程序更稳定、更灵活 —— 开闭原则
  • 构建扩展性更好的系统 —— 里氏替换原则
  • 让项目拥有变化的能力 —— 依赖倒置原则
  • 系统有更高的灵活性 —— 接口隔离原则
  • 更好的可扩展性 —— 迪米特原则

jni操作

内部算法类,数据加解密已一些数据操作的类,尽量都写在jni内,这样代码的安全性会大大增加。jni操作见这儿eclipse jni基础操作Android studio jni基础操作

代码混淆

在某些内部类无法掩藏的前提下或者你想保护它不被别人看到,可以使用代码混淆来保护;
代码混淆主要是通过修改类名、成员名和方法名等,并且在内部建立了一张映射表,使破解者不容易看懂代码而已,记住只是不易而已

混淆方法:
主要是在proguard-android文件下编写混淆代码,当你打开混淆时,默认是所有代码均进行混淆,你编写的代码就是保持哪些类不被混淆,一般来说下面几个你不能混淆

不能混淆的地方

  1. 你引用的第三方库不能混淆
  2. 系统的api,如一些activity的生命周期方法不能混淆
  3. 在androidmainfest里面的activity不能混淆
  4. 你需要暴露的接口不能混淆

混淆语法

-keep 某一个class                          
-keep public class * extends Android.app.Activity     //这个类不能保持不混淆
-keep public class * extends Android.app.Activity{*;} //类以及里面的成员方法都不混淆
-keep public class com.jack.xinyounative.bean.**{*;}  //这个路径下的类以及成员不混淆
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod //注解  异常 内部类等不混淆

#jar config
-dontwarn okhttp3.**                        //不能有告警
-keep class okhttp3.**{*;}
-keep public class com.jack.xinyounative.bean.OrderInfo{
    public void setSubject(java.lang.String);
    public void setBody(java.lang.String);
    public void setAmount(int);
    public void setApp_user_name(java.lang.String);
    public void setNotify_url(java.lang.String);
    public void setApp_order_id(java.lang.String);
    public void setApp_user_id(java.lang.String);
    public void setExt(java.lang.String);
}                                           //类里面的某些方法不能混淆
-keepclasseswithmembers class **.R$*{
    public static <fields>;
}                                           //资源文件不能混淆

由于Android studio默认是release混淆,所以你需要在gradle里面修改为debug或者增加release的混淆代码,如下:

buildTypes {
        debug{
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

最后,如果你还想加密apk的,不妨尝试修改apk的arsc文件,修改文件头即可,让apktool失效;更或者给apk加壳,使别人看到的代码只是壳而已,等等等....

到这一步,大体都已经完成了,如果哪位仁兄有更好的建议,还忘不吝赐教

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容