zoukankan      html  css  js  c++  java
  • android studio 使用gradle 导出jar包,并打包assets目录

    警告:本文年久失修。

    随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路。

    最近项目在做一个sdk,供别的开发者使用,所以要求导出jar包。

    与eclipse不同,android studio 1.0 没提供导出jar包的图形界面。需要结合gradle来生成jar包。

    首先 需要设置module应用的gradle插件为 library 代码长这样:

    apply plugin: 'com.android.library'
    

    这样,build的时候,android studio 1.0会在 module目录的build/intermediates/bundles/release/ 子目录(这个目录以后版本可能会变)里生成一个名为classes的jar包。
    如果你的项目没用到assets等资源文件,那你直接拷贝出去就可以用了。
    如果想拷贝到outputs目录的话,在module的build.gradle里添加以下代码:

    task clearJar(type: Delete) {
        delete 'build/outputs/yourname.jar'
    }
    
    task makeJar(type: Copy) {
        from('build/intermediates/bundles/release/')
        into('build/outputs/')
        include('classes.jar') 
        rename ('classes.jar', 'yourname.jar')
    }
    
    makeJar.dependsOn(clearJar, build)
    

    如果你和我一样,还需要把assets目录打包到jar包的话,请继续往下看。
    我用了一个非主流的方式打包assets,应该没什么后遗症,咱们江湖儿女都懂的,hack一下更健康。

    其实也没啥神秘的,也不知道算不算hack,就是利用文件依赖来打包assets。代码长这样:

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        provided files('src/main/assets')
        compile 'com.android.support:appcompat-v7:21.0.3'
    }
    

    关键是第三行代码。还有一点一定要注意,需要在assets新建一个名为assets的目录,在这个子目录里放置你需要的文件。这样才可以哦。
    还没完,不知道啥原因,只有minifyEnabled设置为 true才能把assets打包进去。没有去深究,反正我也需要混淆下代码。

    好了,android studio 使用gradle 导出jar包,并打包assets目录 ,我说明白了,对吧。

    另附 proguard配置:

    
    -libraryjars 'C:Softandroidadtsdkplatformsandroid-19android.jar'
    
    -optimizations !code/simplification/arithmetic
    -allowaccessmodification
    -repackageclasses ''
    -keepattributes *Annotation*
    -dontpreverify
    -dontwarn android.support.**
    
    
    -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
    
    -keep public class * extends android.view.View {
        public <init>(android.content.Context);
        public <init>(android.content.Context,android.util.AttributeSet);
        public <init>(android.content.Context,android.util.AttributeSet,int);
        public void set*(...);
    }
    
    -keepclasseswithmembers class * {
        public <init>(android.content.Context,android.util.AttributeSet);
    }
    
    -keepclasseswithmembers class * {
        public <init>(android.content.Context,android.util.AttributeSet,int);
    }
    
    -keepclassmembers class * extends android.content.Context {
        public void *(android.view.View);
        public void *(android.view.MenuItem);
    }
    
    -keepclassmembers class * extends android.os.Parcelable {
        static ** CREATOR;
    }
    
    -keepclassmembers class **.R$* {
        public static <fields>;
    }
    
    -keepclassmembers class * {
        @android.webkit.JavascriptInterface
        <methods>;
    }
    
    
  • 相关阅读:
    《Django By Example》第十二章(终章) 中文 翻译 (个人学习,渣翻)
    《Django By Example》第十一章 中文 翻译 (个人学习,渣翻)
    《Django By Example》第十章 中文 翻译 (个人学习,渣翻)
    《Django By Example》第九章 中文 翻译 (个人学习,渣翻)
    《Django By Example》第八章 中文 翻译 (个人学习,渣翻)
    《Django By Example》第五章 中文 翻译 (个人学习,渣翻)
    我的superui开源后台bootstrap开发框架
    LayoutInflater 总结
    Android屏幕分辨率概念(dp、dip、dpi、sp、px)
    android studio安装问题
  • 原文地址:https://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html
Copyright © 2011-2022 走看看