8

「アーム」のみをサポートするベンダーからの .so ファイルがあります。現在、私の Android アプリケーションでは問題なく動作します。どういうわけか、Android Studio モジュールを使用して実装を分離したいので、このチュートリアルhttps://www.youtube.com/watch?v=1i4I-Nph-Cwに従ってモジュールを Jar としてエクスポートできます。

JAR をエクスポートすると、ビルド プロセスでエラーが返される

/Users/zoom/android-ndk-r9d/toolchains/mipsel-linux-android-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/mipsel-linux-android/4.8/../../../../mipsel-linux-android/bin/ld: skipping incompatible src/main/jniLibs/armeabi/libremote_client.so when searching for -lremote_client
/Users/zoom/android-ndk-r9d/toolchains/mipsel-linux-android-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/mipsel-linux-android/4.8/../../../../mipsel-linux-android/bin/ld: cannot find -lremote_client
collect2: error: ld returned 1 exit status

:app:linkMipsDebugRemoteDesktopSharedLibrary FAILED

FAILURE: Build failed with an exception.

ログには、gradle が mips に対してビルドしようとしていたが、arm ライブラリしかないため、互換性のないライブラリが原因で失敗したことが示されています。mips に対してビルド プロセスをスキップする方法を質問します。または、ARM のみのアーキテクチャをターゲットにすることは可能ですか?

build.gradle

apply plugin: 'com.android.model.library'

model {
android {
    compileSdkVersion = 23
    buildToolsVersion = "22.0.1"

    defaultConfig.with {
        //applicationId = "com.test.remote"
        minSdkVersion.apiLevel = 19
        targetSdkVersion.apiLevel = 21
        //versionCode = 1
        //versionName = "1.0"
    }

}

android.ndk {
    moduleName = "remote_client"
    //CFlags += "-DANDROID_NDK"
    CFlags += ['-std=c99', '-fstrict-aliasing']
    ldLibs += ["log", "remoted_client"]
}

android.buildTypes {
    release {

        minifyEnabled = false
        proguardFiles += file('proguard-rules.pro')
    }
}

android.sources {
    main {
        jni {
            source {
                srcDir 'src/main/jni'
            }
        }
        jniLibs {
            source {
                srcDir 'src/main/jniLibs'
            }
        }
    }
}

android.productFlavors {
    create("arm") {
        ndk.with {
            abiFilters += "armeabi"
            ldFlags += "-Lsrc/main/jniLibs/armeabi"
        }
    }
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
}


task clearJar(type: Delete) {
delete 'mylib.jar'
}

task makeJar(type: Copy) {
   from('build/intermediates/bundles/release/')
   into('release/')
   include('classes.jar')
   rename ('classes.jar', 'mylib.jar')
}

makeJar.dependsOn(clearJar, build)
4

3 に答える 3

7

Android SDK 26、NDK 15.2 でテスト済み

ファイル上app/build.gradle

android {
    defaultConfig {
        ndk {
            abiFilters 'arm64-v8a'

のみarm64-v8a、または現在廃止されていないすべての ARM ターゲットに対してビルドします。

abiFilters 'arm64-v8a', 'armeabi-v7a'

現在の ABI リスト: https://developer.android.com/ndk/guides/abis.html

Ubuntu 17.10 ホスト、Android Studio 3、Android SDK 26、NDK 15.2、および Android 6.0.1 デバイスでテスト済み。

GitHubのサンプル プロジェクト。

于 2017-11-29T17:21:32.730 に答える
0

最後に私はそれを作った。特定のタスクを無効にする例を次に示します。build.gradle にこの行を追加します

tasks.getByPath(":app:linkMipsDebugRemoteDesktopSharedLibrary").enabled = false
于 2015-10-27T22:46:12.513 に答える
0

android.ndkセクションに移動abiFiltersするだけです。

model {
    android.ndk {
        moduleName = "remote_client"
        CFlags += ['-std=c99', '-fstrict-aliasing']
        ldLibs += ["log", "remoted_client"]
        abiFilters = ['armeabi']
    }
}
于 2015-10-22T11:25:59.073 に答える