Android Studio 生成jar包

生成jar包,目前掌握两种方法,后续可能继续更新。
第一种通过gradle生成jar包,生成的jar包只有源代码的.class 文件不含资源文件。
1. 新建一个modle类型为library
2. 在该library的gradle中加入如下代码
task makeJar(type: Copy) {
    delete 'build/libs/mysdk.jar'
    from('build/intermediates/bundles/release/')
    into('build/libs/')
    include('classes.jar')
    rename ('classes.jar', 'mysdk.jar')
}

makeJar.dependsOn(build)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3. 在terminal下输入一下命令

//在终端执行生成JAR包

gradlew makeJar

4. 执行完在library>build>libs>下会发现产生了改jar包

这里写图片描述

5. 特别提醒:在主工程App的build中要加入librarydemo 这个依赖model:

第二种方法:包括资源文件的打包方式,开发时要导出sdk给别人使用就要用这种方式了

与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。就是利用文件依赖来打包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 (android.content.Context);
     public (android.content.Context,android.util.AttributeSet);
     public (android.content.Context,android.util.AttributeSet, int );
     public void set*(...);
}
 
-keepclasseswithmembers class * {
     public (android.content.Context,android.util.AttributeSet);
}
 
-keepclasseswithmembers class * {
     public (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 ;
}
 
-keepclassmembers class * {
     @android .webkit.JavascriptInterface
     ;
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile project(':librarydemo')
}

第二种方法参照之前的博客
  • 1
  • 2
  • 3
  • 4
  • 5

你可能感兴趣的:(android项目)