解决transformNative_libsWithStripDebugSymbolForDebug办法

Posted zhujm320

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决transformNative_libsWithStripDebugSymbolForDebug办法相关的知识,希望对你有一定的参考价值。

GitHub上工程地址

https://github.com/jpush/jpush-hbuilder-demo.git

 

android studio4.0.1 在编译老项目时,由于NDK采用了android-ndk-r9b,编译出现如下错误

 

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForDebug'.
> java.lang.NullPointerException (no error message)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

问题分析:  

1. 当前工程并没有jni代码,不是由编译c/c++代码引起

2. 出现该问题,肯定是在编译时NDK对so做了一些操作

注意: so在打包到apk时,android studio会对so进行优化,如果优化可以确认的它利用了用户设置进来的NDK进行了优化

结论: 

1. 编译so时采用的NDK与我们设置进去的android-ndk-r9b不兼容,猜测编译项目中的so采用的NDK版本估计更新

解决方案:

方案1. 打包so时,禁止NDK进行优化

在build.gradle中添加如下代码

android  

 ...


 buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        

        debug 
            signingConfig signingConfigs.debug
        
    

    //禁止优化so
    packagingOptions
        doNotStrip "**/*.so"
    

  ...

重新编译一下,编译通过

 

方案2. 采用更新的NDK,逐个NDK进行测试,通过多次尝试找到合适的NDK(目的就是尽量将我们设置的NDK和编译so的时候的NDK保持一致)

我这边选择了android-ndk-r14b,也能编译通过

以上两种方式都解决以上问题,如果不知道第三方的so采用哪一个NDK版本编译的话,个人更加倾向采用第一个方案来解决。

 

以上是关于解决transformNative_libsWithStripDebugSymbolForDebug办法的主要内容,如果未能解决你的问题,请参考以下文章

vs2008解决方案资源管理器不显示解决方案

什么是 沙盒解决方案

解决PowerShell乱码问题

如何解决解决方案中现有项目的c#CS0006错误

关于问题解决与事件解决的思考

「解决方案架构」解决方案架构概述