AS中jar包和aar包的导出与导入

从Eclipse转Android Studio后,很多操作都不是很清楚,就包括jar包的使用,直到昨天出现了问题,才去找原因并解决。

问题是这样的:自定义的控件打成jar包了,在其他工程中调用,在运行时出现错误,提示说在xml中的自定义控件无法填充。在xml中弹出错误,说NoClassDefFoundError,进入源码发现指向的是styleable,也就是自定义属性。毫无疑问,这就是R文件的问题了。在libs中打开jar包,都是些class文件,根本没有R文件和attrs文件。肯定要加入才有效。

那怎么把这些资源文件加入jar包中???

最后,在百度经验里找一篇aar导入的文章,才明白jar包和aar包的区别。当晚就把jar包和aar包的导出与导入进行了总结,今天发表以帮助有需要的朋友。这些都是简单地导出与导入,不涉及代码混淆等比较高级的操作(日后研究)。

在AS中有两种包:jar包和aar包
jar包:只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。
aar包:包含jar包和资源文件,如图片等所有res中的文件。

一、jar包的导出与导入

导出
  1. 新建库,File——New——New Module——Android Library
  2. 编译或生成工程,Build——Make Module
  3. 获取jar包,在build\intermediates\bundles\release目录下的classes.jar
导入
  1. 把工程切换到Project视图下,在app目录下创建libs目录
  2. 把jar拷贝到libs目录
  3. 右键——Add to Library,Create Library默认选app。完成后jar包将变成如下这样
    这里写图片描述

二、aar包的导出与导入

导出

编译库后,jar包和aar会同时生成,arr包的路径:build\outputs\aar\zjun_lib-release.aar。zjun_lib为我的库名

导入

两种方法

【1】通过gradle(个人推荐)
  1. 把aar复制到工程应用app下的libs目录中
  2. 在app的build.gradle中添加一个本地仓库,并把libs作为仓库地址:

    // aar包添加1/2
    repositories {
        flatDir{
            dirs 'libs'
        }
    }
  3. 修改dependencies。添加一行:compile(name:’zjun_lib-release’, ext:’aar’)。name就是zjun_lib-release.aar的文件名,ext就是zjun_lib-release.aar扩展名

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:23.2.1'
        // aar包添加2/2
        compile(name:'zjun_lib-release', ext:'aar')
    }
  4. 重新编译,编译成功后,在build\intermediates\exploded-aar目录下能看到zjun_lib-release.aar包的内容了。jars下是class文件,res下是资源文件(图是后来截取的,包名已经修改成zjun_lib-1.1.aar了)
    这里写图片描述

【2】界面导入
  1. File——New——New Module——Import .JAR/.AAR Package(jar包也可以这样导入)
  2. 选择aar包所在的路径,一般还是放置在libs目录下。Finish完成即可
    这里写图片描述
  3. Sync Now同步一下工程与Gradle,或重新编译工程。zjun_lib-1.1将变成一个带茶杯的文件夹,且会自动添加一个iml文件
    这里写图片描述
  4. 添加到app的依赖中去。Project Structure——app——Dependencies中添加Module dependency,把module添加进去

参考:
http://jingyan.baidu.com/article/2a13832890d08f074a134ff0.html

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Flutter 插件可以集成本地的 AAR JAR 。具体步骤如下: 1. 在 Flutter 项目的 `android` 目录下创建 `libs` 目录,将 AAR JAR 复制到该目录下。 2. 在 Flutter 项目的 `android/app/build.gradle` 文件添加如下配置: ``` repositories { flatDir { dirs 'libs' } } dependencies { // 引入 AAR implementation(name: 'your-aar-filename-without-extension', ext: 'aar') // 引入 JAR implementation files('libs/your-jar-filename.jar') } ``` 3. 在 Flutter 插件的 Android 实现类,使用以下代码加载本地的 AAR JAR : ``` import android.content.Context; import android.content.res.AssetManager; import android.os.Bundle; import android.util.Log; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.android.FlutterActivityLaunchConfigs; import io.flutter.embedding.android.FlutterView; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodChannel; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class MyFlutterActivity extends FlutterActivity { private static final String CHANNEL = "com.example.myapplication/my_channel"; @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); // 加载 AAR 的类 MyAARClass myAARClass = new MyAARClass(); // 加载 JAR 的类 MyJARClass myJARClass = new MyJARClass(); // 注册 MethodChannel new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) .setMethodCallHandler( (call, result) -> { if (call.method.equals("myMethod")) { // 调用 AAR 的方法 String aarResult = myAARClass.myMethod(); // 调用 JAR 的方法 String jarResult = myJARClass.myMethod(); // 返回结果 JSONObject jsonObject = new JSONObject(); try { jsonObject.put("aarResult", aarResult); jsonObject.put("jarResult", jarResult); } catch (Exception e) { e.printStackTrace(); } result.success(jsonObject.toString()); } else { result.notImplemented(); } } ); } } ``` 这样,就可以在 Flutter 插件使用本地的 AAR JAR 了。注意,在使用 JAR 时,需要将该放在 `libs` 目录下,并在 `build.gradle` 文件添加依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值