最近項目在做1個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/ 子目錄(這個目錄以后版本可能會變)里生成1個名為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)
如果你和我1樣,還需要把assets目錄打包到jar包的話,請繼續往下看。
我用了1個非主流的方式打包assets,應當沒甚么后遺癥,我們江湖兒女都懂的,hack1下更健康。
其實也沒啥神秘的,也不知道算不算hack,就是利用文件依賴來打包assets。代碼長這樣:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
provided files('src/main/assets')
compile 'com.android.support:appcompat-v7:21.0.3'
}
關鍵是第3行代碼。還有1點1定要注意,需要在assets新建1個名為assets的目錄,在這個子目錄里放置你需要的文件。這樣才可以哦。
還沒完,不知道啥緣由,只有minifyEnabled設置為 true才能把assets打包進去。沒有去深究,反正我也需要混淆下代碼。
好了,android studio 使用gradle 導出jar包,并打包assets目錄 ,我說明白了,對吧。
另附 proguard配置:
-libraryjars 'C:Softandroidadtsdkplatformsandroid⑴9android.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>;
}
android學習筆記(41)android選項菜單和子菜單(SubMenu )
android學習筆記(40)Notification的功能與用法
android學習筆記(42)android使用監聽器來監聽菜單事件
android學習筆記(43)android創建單選菜單和復選菜單
android學習筆記(44)android設置與菜單項關聯的Activity
android學習筆記(45)android上下文菜單