zoukankan      html  css  js  c++  java
  • [Android][Android Studio] Gradle项目中加入JNI生成文件(.so文件)

    版权声明:本文作者:Qiujuer https://github.com/qiujuer; 转载请注明出处,盗版必究。。! https://blog.csdn.net/qiujuer/article/details/24209457

    为了适应潮流使用Android Studio还是有半年多了。

    对于从Eclipse迁移项目到Android Studio中增加.jar文件和.so文件无疑是一件非常重要也是非常头疼的问题!

    在最新版本号中,默认是自己主动打包libs以下的全部.jar文件的,所以jar不用多讲了。

    增加.SO(这个是要看你的项目Gradle版本号)

    提示:都是设置build.gradle文件

    (1)老版本号,好像是指0.5曾经的,详细不太记得了。方法例如以下:

    task copyNativeLibs(type: Copy) {
        from(new File(project(':MyProject').buildDir, 'native-libs')) { include '**/*.so' }
        into new File(buildDir, 'native-libs')
    }
    
    tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
    
    clean.dependsOn 'cleanCopyNativeLibs'
    
    tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
        pkgTask.jniDir new File(buildDir, 'native-libs')
    }

    (2)新版本号。详细版本号号忘记了。反正假设你下载的是最新的那么自带就是最新的编译器。

    这个版本号我如今知道的有三种办法做到打包.SO文件

    (2.1)打包前先生成.Jar文件后自己主动解包到apk文件

    task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
        destinationDir file("$buildDir/native-libs")
        baseName 'native-libs'
        extension 'jar'
        from fileTree(dir: 'libs', include: '**/*.so')
        into 'lib/'
    }
    
    tasks.withType(Compile) {
        compileTask -> compileTask.dependsOn(nativeLibsToJar)
    }

    以下一句话就是打包生成文件夹(build ative-libs)中的.jar文件

    compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')


    (2.2)手动生成.Jar文件后自己主动解包到apk文件

    这个方式须要自己手动进行.SO文件压缩,详细步骤为:将全部须要使用的.so文件压缩为.zip文件(zip中的文件文件夹结构为: lib/armeabi/*.so)然后把zip文件后缀改为.Jar然后放到libs生成apk就ok


    默认就是自己主动打包全部.Jar文件:

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
    }

    (2.3)这也就是如今我正在使用的方式(推荐)。事实上弄了大半天无非就是把.SO文件打包到APK的lib文件夹中,假如细致阅读了Gradle的用法。自然就知道事实上Gradle官方在新版已经自己主动实现了打包.SO文件的.非常easy级就是在配置的android节点下增加以下的内容就ok:

    sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }

    其它地方无需改动,整个项目的配置文件例如以下:

    apply plugin: 'android'
    
    android {
        compileSdkVersion 19
        buildToolsVersion "19.0.0"
    
        defaultConfig {
            minSdkVersion 16
            targetSdkVersion 19
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                runProguard false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
        }
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
    }

    这不就是非常easy么,无需手动打包,也无需非常复杂的打包拷贝命令。简单的操作就ok。能够说多看看官方文档是多么的重要。

    原创作品,转载请注明出处。

        QIUJUER(qiujuer@live.cn)


  • 相关阅读:
    Unity3D脚本使用:物体调用物体
    Unity3D脚本使用:游戏对象访问
    Unity3D 浏览工具
    spring的工厂方法
    spring运用的设计模式
    Jquery ajax 与 lazyload的混合使用(实现图片异步加载)
    关于线程安全的一点总结
    lazyload的使用心得
    ajax原理及应用
    $.ajax和$.load的区别
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/9993131.html
Copyright © 2011-2022 走看看