最近在搞个广告sdk,使用Android平台。使用Android studio开发。sdk最后要打成Jar包。

Eclipse下打jar包并且混淆的做法是参考这篇博客:Proguard使用最新,最全教程,亲自试验

在Android studio下,打包都是在gradle文件中配置的,所以在网上找了比较好的文章,解决了打包问题。

Android Studio 使用 Gradle 打包 Jar  感谢博主分享。


由于在window下开发,并且根据自己的需求,就简单改了下脚本,运行ok

import com.android.build.gradle.AppPluginimport com.android.build.gradle.LibraryPluginimport proguard.gradle.ProGuardTaskapply plugin: 'com.android.application'android {    compileSdkVersion 22    buildToolsVersion "23.0.1"    defaultConfig {        applicationId "com.xxx.adsdk"        minSdkVersion 15        targetSdkVersion 22        versionCode 1        versionName "1.0"    }    buildTypes {        release {            minifyEnabled true            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])}//dependsOn 可根据实际需要增加或更改task buildJar(dependsOn: ['compileReleaseJava'], type: Jar) {    appendix = "_v"    baseName = "xxx"    version = "3.1.0"    classifier = "release"    //后缀名    extension = "jar"    //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]    archiveName = "PingStartSDK.jar"    //需打包的资源所在的路径集    def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];    //初始化资源路径集    from srcClassDir    //去除路径集下部分的资源    exclude "com/xxx/adsdk/BuildConfig.class"    exclude "com/xxx/adsdk/BuildConfig\$*.class"    exclude "com/xxx/adsdk/test/**/*.class"    exclude "**/R.class"    exclude "**/R\$*.class"    //只导入资源路径集下的部分资源    include "com/xxx/adsdk/**/*.class"    //注: exclude include 支持可变长参数}//use "gradlew.bat proguardJar" to gene jartask proguardJar(dependsOn: ['buildJar'], type: ProGuardTask) {    //Android 默认的 proguard 文件    configuration android.getDefaultProguardFile('proguard-android.txt')    //manifest 注册的组件对应的 proguard 文件    configuration project.buildDir.absolutePath + "/intermediates/proguard-rules/release/aapt_rules.txt"    configuration 'proguard-rules.pro'    String inJar = buildJar.archivePath.getAbsolutePath()    //输入 jar    injars inJar    //输出 jar    outjars inJar.substring(0, inJar.lastIndexOf( "\\")) + "\\Proguard-${buildJar.archiveName}"    //设置不删除未引用的资源(类,方法等)    dontshrink    Plugin plugin = getPlugins().hasPlugin(AppPlugin) ?            getPlugins().findPlugin(AppPlugin) :            getPlugins().findPlugin(LibraryPlugin)    if (plugin != null) {        List runtimeJarList        if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {            runtimeJarList = plugin.getRuntimeJarList()        } else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {            runtimeJarList = android.getBootClasspath()        } else {            runtimeJarList = plugin.getBootClasspath()        }        for (String runtimeJar : runtimeJarList) {            //给 proguard 添加 runtime            libraryjars(runtimeJar)        }    }}

最后在Android studio的命令行里输入 

gradlew.bat proguardJar



更多相关文章

  1. 【原创】Android 引用第三方库文件大全
  2. android 识别U盘以及读写文件
  3. Android ListView中点击单行实现RadioButton的单选功能,自定义Ite
  4. 多媒体文件信息
  5. windows修改Android AVD路径
  6. Android项目开发完成以后就要将android项目文件打包成apk文件
  7. Android代码内存优化建议-Android资源篇
  8. TextView文字阴影效果以及styles文件的使用
  9. 分析Android 根文件系统启动过程(init守护进程分析)

随机推荐

  1. 工厂模式理解了没有?
  2. 你的Springboot应用到底启动了哪些bean?这
  3. 单例模式的十种写法,你会几个?
  4. 我在一个构造方法中写了30个参数,老板看了
  5. android:windowSoftInputMode属性详解以
  6. 一个GCRoot不可达的对象,会立刻被垃圾回收
  7. 压缩两个集合,方法原来这么多(实用技巧)
  8. 为什么推荐使用for-each而不是for循环遍
  9. Android源码50例汇总,欢迎各位下载
  10. 万字长文带你彻底理解synchronized关键字