AS编写sdk并打成jar包供其它APP调用
如果sdk中涉及res下面的資源注意package路徑。
1.?Android?Studio后,結(jié)合gradle來(lái)配置生成jar 包。
gradle在構(gòu)建的時(shí)候,會(huì)對(duì)各個(gè)module的class文件打包成classes.jar,并存放在build/bundles/release(或者debug) 目錄下,所以其實(shí)我們可以直接將classes.jar拷貝出來(lái),并重命名。這算是取巧,也是最便捷的方式,當(dāng)然這類方法也可以用gradle 腳本來(lái)實(shí)現(xiàn),
task makeJar(type: Copy) {from('build/intermediates/bundles/release/')into('build/libs/')include('classes.jar')rename ('classes.jar', 'sdk.jar') }makeJar.dependsOn(build)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
然后在終端執(zhí)行 gradlew makeJar 命令,就可以在bulid/libs 目錄下生成對(duì)應(yīng)的jar包。但這種打包方式經(jīng)常會(huì)把一些冗余的文件一塊打進(jìn)jar ,不僅影響jar包的體積,還會(huì)經(jīng)常導(dǎo)致com.Android.dex.DexException: Multiple dex files define 此類的錯(cuò)誤 。
這類的問(wèn)題,我們?cè)谟玫降谌教峁┑膕dk 時(shí),也會(huì)經(jīng)常碰到,比如集成微博sdk時(shí)的這類 weibo sdk Multiple dex files define Lcom/sina/weibo/sdk/BuildConfig 問(wèn)題
原因是sdk 的jar包中打入了BuildConfig.class,解決方法很簡(jiǎn)單:解包,刪除里面的 BuildConfig.class,然后重新打包 jar。
具體如下:?
1. 解壓jar包:?
jar xf xxx.jar?
2. 刪除解壓后目錄里面的//BuildConfig.class?
3. 重新打包:?
jar cvf xxx.jar *
當(dāng)然我們不希望自己提供的jar 也給其他開(kāi)發(fā)者帶來(lái)同樣的困擾,所以我們期待可以有選擇性的選擇需要打包的class,排除不需要的class ,如BuildConfig.class、R.class 等
task makeJar(type: Jar) {from file('build/intermediates/classes/release')archiveName = 'sdk.jar'destinationDir = file('build/libs') //過(guò)濾不需要的classexclude "**/**/BuildConfig.class"exclude "**/**/BuildConfig\$*.class"exclude "**/R.class"exclude "**/R\$*.class" //指定打包的classinclude "com/test/**/*.class" } makeJar.dependsOn(build)- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
通過(guò)上述腳本就可以實(shí)現(xiàn)選擇性的打包,關(guān)于打包時(shí)的混淆配置等,感興趣的朋友可以參考:?
http://my.oschina.net/u/2531612/blog/591366?fromerr=Xd1Kd7dY
3個(gè)錯(cuò)誤non-zero exit value 1;?non-zero exit value 2;?non-zero exit value 3(一下方法親測(cè)好用)
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.> com.Android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe'' finished with?non-zero exit value 1
這個(gè)是因?yàn)橐蕾嚢貜?fù)了 (像v4和nineoldandroids),如圖。app中實(shí)現(xiàn)了對(duì)easeUI的依賴,但是app和easeUI都添加了對(duì)這個(gè)包的依賴。所以就報(bào)這個(gè)錯(cuò)誤,修改之后再報(bào),就clean,rebuild一下
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe'' finished withnon-zero exit value 2
這個(gè)錯(cuò)誤在app的build.gradle里面添加下面這句就好了。
android {defaultConfig {...multiDexEnabled true }}
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe'' finished withnon-zero exit value 3
這個(gè)錯(cuò)誤就在app.bulid里面加上這句,再rebuild ,之后再運(yùn)行就行了。4g可以看電腦配置修改(2g,3g,6g,8g)。
dexOptions {javaMaxHeapSize "4g" } 如圖:
http://blog.csdn.net/edisonchang/article/details/51296265
http://blog.csdn.net/qq_26296197/article/details/52157272
原文地址:?http://blog.csdn.net/ccm_oliver/article/details/53407718
總結(jié)
以上是生活随笔為你收集整理的AS编写sdk并打成jar包供其它APP调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于intent-filter的误区
- 下一篇: 一种实现(无须root)手机截屏方案