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)


查看全文
  • 相关阅读:
    转载: CSS Hack 兼容浏览器经验分享
    PHP parseurl 一个好用的函数
    css 小经验: css hack 的一些兼容小技巧
    jquery 之 $.ajax() 等 success: function(){} 中使return的问题
    转载: PHP socket
    jquery 之 mousedown 鼠标按键响应
    php REMOTEADDR之获取访客IP的代码
    PHP settimelimit0长连接的实现分析
    php selectradio和checkbox默认选择的实现方法
    转载:php 小经验: preg_match 与 preg_match_all 函数
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10775312.html
  • Copyright © 2011-2022 走看看