最近在搞个广告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项目开发完成以后就要将android项目文件打包成apk文件
  2. windows修改Android(安卓)AVD路径
  3. 创建和使用Android(安卓)library工程
  4. Android(安卓)应用开发支持不同的语言国际化操作
  5. Android代码内存优化建议-Android资源篇
  6. Android环境变量配置
  7. android关于多dex打包的理解
  8. Android(安卓)adb不是内部或外部命令 问题解决
  9. Pycharm安装PyQt5的详细教程

随机推荐

  1. golang开发android应用(二) - go语言生成an
  2. android 版本更新和下载安装 适配android
  3. android菜鸟学习笔记16----Android项目打
  4. Android系列之Wifi定位
  5. AsyncTask使用和源码解析
  6. android开发每日汇总【2011-11-10】
  7. android 反编译
  8. 系出名门Android(5) - 控件(View)之TextV
  9. 如何关闭android中的HandlerThread
  10. android 使用Intent传递数据之返回结果