【问题标题】:App which use gradle get error "Native method not found"使用 gradle 的应用程序出现错误“未找到本机方法”
【发布时间】:2013-09-14 14:59:54
【问题描述】:

我使用 gradle 来生成 apk。安装后,发布版本报错:java.lang.UnsatisfiedLinkError: Native method not found: com.fss.e.b.a:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

但调试的看起来不错。我写的build.gradle如下:

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':fss:libs:actionbarsherlock')
    compile project(':fss:libs:library')
    compile project(':library')
}

android {
    compileSdkVersion 17
    buildToolsVersion "18.0.1"
    signingConfigs {
        myConfig{

        }
    }


    buildTypes{

        release {
            signingConfig  signingConfigs.myConfig
        }


    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
tasks.withType(Compile) {  
    options.encoding = "UTF-8"  
}  
task copyNativeLibs(type: Copy) {
  from fileTree(dir: 'libs', include: '**/*.so' )
    into  'build/native-libs'
}

tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniDir new File('build/native-libs')
}

【问题讨论】:

  • 只是为了确认:您从 JNI 显式注册 com.fss.e.b.a,或者在本机库中声明了 Java_com_fss_e_b_a 方法?我问是因为这看起来像 Proguard 混淆。
  • @fadden 是的,这是proguard混淆。那么如何让它链接使用混淆的本机方法?

标签: java android android-ndk gradle


【解决方案1】:

添加这些以保留原生方法。错误将得到解决。

-keepclasseswithmembernames class * {
    native <methods>;
}

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 2021-05-17
    • 2014-06-03
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2015-11-03
    • 2022-06-10
    相关资源
    最近更新 更多