How to create an Android Library Jar with gradle without publicly revealing source code?
我想从一个 Android 库项目中创建一个 Jar。设置方式如下:
1
2 3 4 5 6 7 8 9 10 11 |
ProjectName
//- lib | //- lib | //- armeabi | //- libNativeFirst.so | //- libNativeSecond.so //- src //- main //- java //- com.package.sdk //- PackageSDK.java |
我希望将所有这些都打包在一个 Jar 中,但不透露
我这样设置我的
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
buildscript { repositories { mavenCentral() } dependencies { classpath ‘com.android.tools.build:gradle:0.5.+’ } } apply plugin: ‘android-library’ repositories { android { defaultConfig { sourceSets { task jar(type: Jar) { |
当我在项目目录中运行
1
2 3 4 5 6 7 8 9 |
ProjectName.jar
//- lib | //- armeabi | //- libNativeFirst.so | //- libNativeSecond.so //- com //- package //- sdk //- PackageSDK.java |
我希望在执行
编辑:
根据 Ben Manes 的建议,我将
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
sourceSets {
main { java { srcDir ‘src/main/java’ } resources { srcDir ‘src/../lib’ } output { classesDir ‘build/classes’ resourcesDir ‘build/javaResources’ } } } |
和
1
2 3 |
task jar(type: Jar) {
from android.sourceSets.main.output } |
Gradle 现在给我这个输出:
注意:答案已被编辑。请参阅下面的 2014 年 7 月 28 日更新。
这是我最终想出的解决方案。可能有更好的方法可用,但我还没有找到。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
android {
compileSdkVersion 18 buildToolsVersion"18.0.1" defaultConfig { sourceSets { task clearJar(type: Delete) { task makeJar(type: Copy) { makeJar.dependsOn(clearJar, build) |
运行
1
2 3 4 5 6 7 8 9 |
ProjectName.jar
//- lib | //- armeabi | //- libNativeFirst.so | //- libNativeSecond.so //- com //- package //- sdk //- PackageSDK.class |
这正是我需要的结果。我现在可以在其他项目中成功使用
编辑:虽然我可以在 Android Studio 中的项目中使用生成的 jar,但我不能在 ADT 中创建的项目中这样做,因为有关 jar 文件中存在本机代码的警告。据说有一个标志可以关闭此签入设置,但它无法正常工作。因此,如果你想创建一个使用本机代码的库,那些使用 ADT 的人必须手动将 armeabi 目录复制到 libs/.
2014 年 7 月 28 日更新:
从 Android Studio 0.8.0 开始,Gradle 输出目录已更改,上述配置将不起作用。我已将配置更改为以下内容:
1
2 3 4 5 6 7 8 9 10 |
task clearJar(type: Delete) { delete ‘build/outputs/ProjectName.jar’ } task makeJar(type: Copy) { |
重要提示:请注意,
只是为@BVB 的答案添加一个轻微的替代方案(尽管很大程度上基于它),这是我必须输出一个 jar
从 myJavaAPIProject 调用
build.gradle
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
//Even though this is a Java project, we need to apply the android plugin otherwise it cannot find the SDK/android.jar and so cannot compile apply plugin: ‘com.android.application’ dependencies { repositories { defaultConfig { sourceSets { } //enforce java 7 //Actually created the .jar file |
AndroidManifest.xml
1
2 3 4 5 |
<?xml version="1.0" encoding="utf-8"?>
<!– this is a dummy file needed to ensure gradle validates and builds ok –> <manifest package="com.myapp.android" /> |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269026.html