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目录 ,我说明白了,对吧。
【Android Studio 生成jar包】 另附 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第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- Android7.0|Android7.0 第三方应用无法访问私有库
- ssh生成公钥秘钥
- 深入理解|深入理解 Android 9.0 Crash 机制(二)