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)


查看全文
  • 相关阅读:
    nginx能访问html静态文件但无法访问php文件
    LeetCode "498. Diagonal Traverse"
    LeetCode "Teemo Attacking"
    LeetCode "501. Find Mode in Binary Search Tree"
    LeetCode "483. Smallest Good Base" !!
    LeetCode "467. Unique Substrings in Wraparound String" !!
    LeetCode "437. Path Sum III"
    LeetCode "454. 4Sum II"
    LeetCode "445. Add Two Numbers II"
    LeetCode "486. Predict the Winner" !!
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10775312.html
  • Copyright © 2011-2022 走看看