【安卓】Android Studio将自定义控件打成jar包
我写一个自定义控件,作为com.android.library想提供给别人使用。由于很多依赖我控件的项目需要在系统平台编译,因此我需要将自己的控件库打成jar包以静态库的形式提供给别人使用。
该项目的build.gradle代码如下:
buildscript {repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 19
targetSdkVersion 23
versionCode 20160324
versionName "1.0.0"
}
sourceSets {
main {
java {
srcDir 'src/main/java'
}
resources {
srcDir 'src/main/'
exclude 'AndroidManifest.xml'
}
res {
srcDir 'src/main/res'
}
}
}
}
task clearJar(type: Delete) {
delete 'build/libs/ArcScroll.jar'
delete 'libs/ArcScroll.jar'
}
task makeJar(type: Copy) {
from('build/intermediates/bundles/release')
into('libs/')
include('classes.jar')
rename('classes.jar', 'ArcScroll.jar')
}
makeJar.dependsOn(clearJar, build)
我遇到的问题是:这个生成的Jar里我没有将R类打进去,导致demo程序使用这个自定义控件时,直接报错:
Suppressed: java.lang.ClassNotFoundException:com.watch.arcscroll.R$styleable at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504)Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
01-02 15:14:53.549 2403-2403/com.watch.arcscroll.example I/Process: Sending signal. PID: 2403 SIG: 9
我google搜索之后,没有搜到明确的解决方案,但是我认为应该是没有将R类打进jar包的缘故。所以求指导如何解决该问题。
回答
jar包里面是没有.R的啊,即便你打进去了,还是一样找不到对应的文件的,想做这种包含资源的只能打成aar包才行。
或者直接做成工程依赖的lib。
压缩工具看一下里面有没有R.class
1、我认为你应该打aar包的格式
2、maven push的时候,也应该推送aar包
以上是 【安卓】Android Studio将自定义控件打成jar包 的全部内容, 来源链接: utcz.com/a/99966.html