现在的位置: 首页 > 编程技术 > 安卓开发 > 正文

Android Studio 添加 lib*.so 文件

2015年11月22日 安卓开发 ⁄ 共 1679字 ⁄ 字号 Android Studio 添加 lib*.so 文件已关闭评论 ⁄ 阅读 199 次

Android Studio 是一个全新的 Android 开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,在IDEA的基础上,Android Studio 提供:

  1. 基于Gradle的构建支持
  2. Android 专属的重构和快速修复
  3. 提示工具以捕获性能、可用性、版本兼容性等问题
  4. 支持 ProGuard 和应用签名
  5. 基于模板的向导来生成常用的 Andoid 应用设计和组件
  6. 功能强大的布局编辑器,可以让你拖拉 UI 控件并进行效果预览
    ——————— 百度百科

Android Stuido 是Google发布的全新的 Android 开发工具,采用了新的 Gradle 构建系统,与 Eclipse 或者 Ant 方式的构建系统有很大区别。为了方便使用 Eclipse 的开发者迁移项目到 Android Studio,在最新的 Eclipse ADT 插件中提供了导出项目为 Gradle 的工具,使用方法:

打开菜单: File -> Export

Android Studio 添加 lib*.so 文件

然后选择要导出的项目,导出成功后会在项目的根目录下生成 build.gradle 文件,之后再用 Android Stuido 导入这个项目就完成了迁移

尽管有 ADT 提供的插件方便迁移 Eclipse 项目,但是导出并不是很完美;因为 Android Studio 使用的是新的 Gradle 构建系统,对 JNI 的支持方式有所不同,按上面的方式导出的项目,打包时 *.so 文件不会自动的添加到 APK;下面来介绍 Android Studio 添加 *.so 的几种方式:

1. 使用 Android Studio 建立的项目添加 *.so

如果直接使用 Android Studio 建立项目,项目结构与 Eclipse 建立的项目结构是不同的:

  • [module_name]
    • ············[src]
    • ················[main]
    • ····················[jniLibs] ———————- JNI 目录
    • ·····························[armeabi]
    • ·····························[armeabi-v7a]
    • ·····························[x86]
    • ·····························[mips]

使用 Android Studio 建立的项目,直接将 *.so 按上面的目录结构放置就可以了。

示例项目:

Android Studio 添加 lib*.so 文件

代码调用:

1
2
String libName = "helloNDK"; // the module name of the library, without .so
System.loadLibrary( libName );

2. 编辑 build.gradle

如果是使用的 Eclipse 导出的项目或者由于别的原因 *.so 必须放置在其他的目录,这时可以编辑 build.gradle 脚本,自定义 *.so 目录:

  • 方法一:
    1
    2
    3
    4
    5
    6
    android {
        // .. android settings ..
        sourceSets.main {
          jniLibs.srcDir 'src/main/myCppLibraries' // <-- Set your folder here!
        }
     }
  • 方法二:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    task copyNativeLibs(type: Copy) {
        from fileTree(dir: 'libs', include: '**/*.so' )  into  'build/native-libs'
    }
    
    tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
    
    clean.dependsOn 'cleanCopyNativeLibs'
    
    tasks.withType(PackageApplication) { pkgTask ->
        pkgTask.jniFolders = new HashSet()
        pkgTask.jniFolders .add(new File(projectDir, 'build/native-libs'))
    }

抱歉!评论已关闭.