Android JNI スティックキャリア .a -> .so (gradle モード) (android Studio)

シリアル

Yilian Youmeng との再会、JNI.A の物語はまだ続きます。当初はmkメソッドで行く予定でしたが、名前は考え抜かれており、道は3000で、私は2杯しか摂取しません。バーン、物語が始まります。

グラドル実験的

物語の豚足。JNI サービス専用のプラグイン。E Wen の仲の良いクラスメートは、これが Gugou の研究室にあるものであると大まかに推測しました。物事は良いことです、それは「実験」という言葉です、ふふふ。純粋な gradle の方法、mk を置き換え、統合をビルドする、夢は良いことです。しかし、Googleはそれをあまり気にしていないようです。あまり噂話ではありませんが、このスキルを実践したい場合は、いくつかの点に注意する必要があります。

注 1. プロジェクトの Gradle 依存関係

gradle-experimental としては、とても嬉しいです。統合、純粋な gradle、私は感謝しなければなりません。一目惚れ、その後断られ、3回目で疲れ果てる。手を上げたり下げたり、構成を変えて、大惨事を越える道を歩み出させてください。構成は次のとおりです。

buildscript {
    ...
    dependencies {
          /**
         * 从前 classpath 'com.android.tools.build:gradle:2.2.3'
         * 由于插件的更换,蝴蝶来到了太平洋,一系列随之而来
         */
        classpath 'com.android.tools.build:gradle-experimental:0.9.3'
    }
}

注2. 現在のアプリモジュール構成

自分の決断、立ち上がることがオナニーです。アプリモジュールは、大災害を乗り越える場として、これからワクワクする準備を始めようとしています。表示される内容:
アプリ アプリケーション プラグインの調整、

//从前, apply plugin: 'com.android.application' 
apply plugin: 'com.android.model.application'

モデルプラグインのサポートにより、Du Jieはスコープモデルに限定され、オーラは異なり、安定しています。知識と知識:

model{ 
    ...
    android{
    }
}

大災害を越えるためには、大災害を越えなければならないように見える必要があり、当然、以前の構成を少し強化する必要があります。ほら、栗がいくつかあるよ。

model{ 
    ...
    android{
      ...
      defaultConfig {
            ···
            //从前车马慢,minSdkVersion 19
            minSdkVersion.apiLevel 9
            targetSdkVersion.apiLevel 19
        }
    }
}

注3. コア構成

大惨事を乗り越える途中で、それを達成するには .a 静的ライブラリに依存する必要があります。まず、ライブラリのリポジトリを定義します。これは、ライブラリ ファイルのパス、ヘッダー ファイルのパス、リンク方法など、ライブラリの基本情報を指定するために使用されます。詳細については、次のコードを参照してください。

model {
    ...
    repositories {
        libs(PrebuiltLibraries) {
            libHello {
                // 头文件地址
                headers.srcDir "src/main/jni/sources/"
                // 静态链接库的引用,
                binaries.withType(StaticLibraryBinary) {
                    staticLibraryFile = file("src/main/jni/sources/${targetPlatform.getName()}/libHello.a")
                }
            }
        }
    }
}

横断強盗、成功の鍵 - NDK 構成、そしてグラドル、横断強盗が始まります。NDK 構成はすでによく知られていますが、ここではいくつかの違いがあります。詳細を吐き出します。

model{
  ...
  android{
     ...
     ndk {
            moduleName "JniDemo"
            //书信很远, cppFlags "-std=c++11"
            cppFlags.add("-std=c++11") //c++版本
            stl "gnustl_static" //支持 stl 标准库
            // 配置可多个, abiFilters "armeabi", "armeabi-v7a", "x86"
            // abiFilters.addAll(['armeabi', 'armeabi-v7a', 'x86'])
        }
  }
}

エピローグ

この時点で、彼は大惨事を乗り越える道をますます遠くへ進んでいます。mk、gradle-experimental については、もともと比較をしたかったのです。後で考えてみましょう。それぞれに独自のメリットがあり、それらはすべて NDK ビルドに基づいています。選択については、人それぞれ好みがあるので、しばらくは言及しません。次の出会い、次の素敵な出会いを楽しみにしています。
広大な世界を体験できるgithubチケットが付属

おすすめ

転載: blog.csdn.net/youyi300200/article/details/73477663