Android学习之:第一次写SDK及SDK打Jar包相关问题记录

来源:互联网 发布:强制解锁软件 编辑:程序博客网 时间:2024/05/16 17:29


项目原因,需要写一个SDK并且要打成Jar包形式。第一次写SDK及打Jar,过程中还是碰到了不少问题,所以简单的记录下,记性不好,以防万一。


一、如何在AS中创建一个SDK文件:

1、在AS中:通过File---->New Module,然后选择Android Library,修改下ApplicationName直接finish就好。这样就创建了一个module文件。

如果已经存在了一个SDK文件,则通过File--->import Module,添加进来即可。


2、如何引入外部文件,作为lib依赖:4中点击“+”选择第三个Module Depandency,然后选中自己所需要作为依赖的文件即可。



二、编写SDK的思路:

1、对外提供公共方法,让外部传递参数;

2、提供一个接口,让外部实现该接口;

3、SDK内部实现数据的逻辑处理,内部封装;

4、通过接口,向外部传递数据的结果。

注意事项:我的SDK中编写了个服务类,需要在引用的APP中的清单文件中进行注册。也就是需要静态注册的,调用者仍需要在清单文件里进行注册,否则不起作用。


三、SDK打Jar包问题:

1、如何打Jar包并且混淆:

1)在SDK中的build.gradle中添加如下信息:

    //打Jar包    task makeJar(type: Copy) {        //删除旧的jar包        delete 'build/libs/mysdk.jar'        //原地址        from('build/intermediates/bundles/release/')        //导出jar包的地址        into('build/libs/')        //包含的jar包        include('classes.jar')        //重命名jar包为mysdk        rename ('classes.jar', 'mysdk.jar')    }    //混淆规则    task proguard(type: proguard.gradle.ProGuardTask, dependsOn: makeJar) {        //  输入路径        injars "build/libs/mysdk.jar"        //  输出路径        outjars 'libs/app_proguard.jar'        //  添加配置信息        configuration 'proguard-rules.pro'    }    makeJar.dependsOn(build)    lintOptions {        abortOnError false    }
2)然后设置混淆:minifyEnable true
3)在混淆文件中编写混淆规则:

# Add project specific ProGuard rules here.#在这里添加项目特定的混淆规则# By default, the flags in this file are appended to flags specified# in C:\Users\yx163\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt#默认情况下,这个目录下的标记会被添加到在C盘目录下的特殊的标记# You can edit the include path and order by changing the proguardFiles# directive in build.gradle.#你可以通过改变混淆器文件指令在build.gradle,来编辑包括路径和顺序。# For more details, see#   http://developer.android.com/guide/developing/tools/proguard.html# Add any project specific keep options here:# If your project uses WebView with JS, uncomment the following# and specify the fully qualified class name to the JavaScript interface# class:#-keepclassmembers class fqcn.of.javascript.interface.for.webview {#   public *;#}#############################自定义的混淆规则##########################################################Jar包去混淆##############################-libraryjars libs/gson-2.2.4.jar-keep class com.google.gson.** {*;}-dontwarn com.google.gson.**#-libraryjars libs/bcprov-jdk15on-1.57.jar-keep class org.bouncycastle.** {*;}-dontwarn org.bouncycastle.**#-libraryjars libs/commons-codec-1.10.jar-keep class org.apaches.commons.** {*;}-dontwarn org.apaches.commons.**#############################Jar包去混淆#############################-dontwarn javax.naming.**-keep class com.squareup.** {*;}#不进行混淆保持原样-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider##########-----------#################SDK包去混淆##########-----------##################将Helper类及其方法、参数等去除混淆,供外部调用-keep class com.***.Helper{*;}-keep  class com.***.listeners.OnGetCodeListener{*;}#将bean文件夹下的文件都不进行混淆-keep class com.***.bean.**{*;}-keep class com.***.utils.common.GsonUtil{*;}##########-----------#################SDK包去混淆##########-----------##################忽略警告-ignorewarnings#保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码是无用的,从而把所有的代码压缩掉,导出一个空的jar-dontshrink#保护泛型-keepattributes Signature#表示混淆时不使用大小写混合类名-dontusemixedcaseclassnames#表示不跳过library中的非public的类-dontskipnonpubliclibraryclasses#打印混淆的详细信息-verbose# Optimization is turned off by default. Dex does not like code run# through the ProGuard optimize and preverify steps (and performs some# of these optimizations on its own).-dontoptimize##表示不进行校验,这个校验作用 在Java平台上的-dontpreverify# Note that if you want to enable optimization, you cannot just# include optimization flags in your own project configuration file;# instead you will need to point to the# "proguard-Android-optimize.txt" file instead of this one from your# project.properties file.-keepattributes *Annotation*-keep public class com.google.vending.licensing.ILicensingService-keep public class com.Android.vending.licensing.ILicensingService# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native-keepclasseswithmembernames class * {    native <methods>;}# keep setters in Views so that animations can still work.# see http://proguard.sourceforge.net/manual/examples.html#beans-keepclassmembers public class * extends Android.view.View {   void set*(***);   *** get*();}# We want to keep methods in Activity that could be used in the XML attribute onClick-keepclassmembers class * extends Android.app.Activity {   public void *(Android.view.View);}# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(Java.lang.String);}-keepclassmembers class * implements Android.os.Parcelable {  public static final Android.os.Parcelable$Creator CREATOR;}-keepclassmembers class **.R$* {    public static <fields>;}# The support library contains references to newer platform versions.# Don't warn about those in case this app is linking against an older# platform version.  We know about them, and they are safe.-dontwarn Android.support.**# Understand the @Keep support annotation.-keep class Android.support.annotation.Keep-keep @Android.support.annotation.Keep class * {*;}-keepclasseswithmembers class * {    @Android.support.annotation.Keep <methods>;}-keepclasseswithmembers class * {    @Android.support.annotation.Keep <fields>;}-keepclasseswithmembers class * {    @Android.support.annotation.Keep <init>(...);}

4)配置完成后重新编译下,点击markJar即可生成混淆后的Jar包。

基础打Jar步骤参考:http://blog.csdn.net/xiangdengbin/article/details/73263906


2、混淆需要注意的一些问题:

1)对外提供的接口需要在混淆文件中设置去混淆;

2)用到自定义的Bean文件也可能需要去混淆,如果有向服务器发送数据显示数据收集问题的话,有可能就是bean文件被混淆的结果。



参考混淆规则链接:

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=209210
http://blog.csdn.net/vrix/article/details/7100944

http://blog.csdn.net/fengyuzhengfan/article/details/43876197


原创粉丝点击