Android開発——Android StudioのNDK開発記録

2282 ワード

1.サードパーティのsoでaarをパッケージングし、jniLibsのディレクトリを指定し、soをaarにパッケージングする
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

2.abiFilters設定フィルタ
ndk {
    abiFilters 'armeabi-v7a'
}

ABIはApplication Binary Interfaceの略です.異なるAndroid携帯電話は異なるCPUを使用するため、異なるコマンドセットをサポートします.CPUと命令セットの各組み合わせには、独自のアプリケーションバイナリインターフェース(またはABI)があります.ABIは、アプリケーションのマシンコードが実行時にどのようにシステムと対話するかを非常に正確に定義できます.アプリケーションが使用する各CPUアーキテクチャにABIを指定する必要があります.典型的なABIには、次の情報が含まれます.
  • マシンコードに使用するCPUコマンドセット.
  • ランタイムメモリの格納とロードのバイト順.
  • は、プログラムおよび共有ライブラリなどのバイナリ・ファイルのフォーマットおよびサポートされるコンテンツ・タイプを実行することができる.
  • は、コンテンツとシステムとの間のデータの様々な約定を解析するために使用される.これらの規則には、整列制限と、スタックの使用方法、関数の呼び出し時に登録する方法が含まれます.
  • 実行時にマシンコードに使用できる関数シンボルのリスト-通常、非常に特定のライブラリセットから使用されます.

  • 3.NDKBuildでNDK環境を構築し、jniLibsのディレクトリを指定し、soをapkにパッケージする
    externalNativeBuild {
        ndkBuild {
            path "src/main/cpp/Android.mk"
        }
    }
        
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    4.GradleによるNDK環境の構築
    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn ndkBuild
    }
    
    task ndkBuild(type: Exec, description: 'Compile JNI source with NDK') {
        Properties properties = new Properties()
        properties.load(project.rootProject.file('local.properties').newDataInputStream())
        def ndkDir = properties.getProperty('ndk.dir')
        commandLine "$ndkDir/ndk-build.cmd", '-j4','-C', file('jni').absolutePath
    }
    
    task ndkClean(type: Exec, description: 'Clean NDK Binaries') {
        Properties properties = new Properties()
        properties.load(project.rootProject.file('local.properties').newDataInputStream())
        def ndkDir = properties.getProperty('ndk.dir')
        commandLine "$ndkDir/ndk-build.cmd", 'clean','-j4', '-C', file('jni').absolutePath
    }
    
    clean.dependsOn 'ndkClean'

    5.CMakeによるNDK環境の構築
        externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }

     
    詳細については、以下を参照してください.https://developer.android.google.cn/ndk/guides