Android Studio 2.0';s内联编译器不再识别本机代码
我目前正在开发一个包含Java和本机代码的库 当客户端应用程序使用该库时,构建工作正常,代码的执行也正常。但是Android Studio 2.0 beta 2的内联编译器不再正确识别我的NDK代码(而Studio 1.5也可以):Android Studio 2.0';s内联编译器不再识别本机代码,android,android-studio,android-ndk,Android,Android Studio,Android Ndk,我目前正在开发一个包含Java和本机代码的库 当客户端应用程序使用该库时,构建工作正常,代码的执行也正常。但是Android Studio 2.0 beta 2的内联编译器不再正确识别我的NDK代码(而Studio 1.5也可以): 当通过JNI\u OnLoad()正确映射时,所有本地人在Java代码中显示为红色: 整个C代码以红色突出显示,因为Studio找不到包含项和符号: … 在从Android Studio 1.5切换到Studio 2.0 beta 2之前,我没有这个问
- 当通过
正确映射时,所有本地人在Java代码中显示为红色:JNI\u OnLoad()
- 整个C代码以红色突出显示,因为Studio找不到包含项和符号:
…
在从Android Studio 1.5切换到Studio 2.0 beta 2之前,我没有这个问题。Studio能够以检测到Java本机方法和本机C代码之间的映射的方式对代码进行反向工程<代码>#include指令等也可以 我不知道如何恢复这种行为:我在某地和某地进行了调查,但我没有发现任何与此相关的情况。我还挖掘了工作室的设置,但没有成功。不过我还在调查 我的渐变设置如下:
- 渐变版本:2.10
- gradle.properties:
android.useDeprecatedNdk = true
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta2' } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultPublishConfig 'release' publishNonDefault true defaultConfig { minSdkVersion 16 targetSdkVersion 21 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { release { ndk { moduleName "mylib" ldLibs "log" } debuggable false jniDebuggable false minifyEnabled false } debug { ndk { moduleName "mylib" ldLibs "log" cFlags "-g" } debuggable true jniDebuggable true minifyEnabled false } } productFlavors { library { } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }
- 项目的构建。gradle:
android.useDeprecatedNdk = true
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta2' } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultPublishConfig 'release' publishNonDefault true defaultConfig { minSdkVersion 16 targetSdkVersion 21 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { release { ndk { moduleName "mylib" ldLibs "log" } debuggable false jniDebuggable false minifyEnabled false } debug { ndk { moduleName "mylib" ldLibs "log" cFlags "-g" } debuggable true jniDebuggable true minifyEnabled false } } productFlavors { library { } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }
- 模块的构建。渐变:
android.useDeprecatedNdk = true
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta2' } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultPublishConfig 'release' publishNonDefault true defaultConfig { minSdkVersion 16 targetSdkVersion 21 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { release { ndk { moduleName "mylib" ldLibs "log" } debuggable false jniDebuggable false minifyEnabled false } debug { ndk { moduleName "mylib" ldLibs "log" cFlags "-g" } debuggable true jniDebuggable true minifyEnabled false } } productFlavors { library { } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }
debug
和release
(启用-g
标志,debugabletrue
和jnidebugabletrue
),但这并没有改变任何事情
编辑,20160212:研究让我认为这是Studio 2.0的NDK集成中的一个bug,所以我打开了。这在Android Studio 2.2中已经修复,但是。不推荐使用的NDK工具链必须在项目配置中替换为。这已在Android Studio 2.2中修复,但是。不推荐使用的NDK工具链必须在项目配置中替换为。会有帮助吗?@Onik您好,非常感谢。但这并没有帮助,因为这个链接显示了如何使C代码签名符合默认的JNI映射(基本上包括以与Java类的完全限定名+本机函数方法匹配的方式命名C代码函数)。我在这里所做的是不同的:我使用在JNI启动时调用的
JNI_Onload()
C函数中声明的显式匹配。奇怪的是,它用于Studio 1.5(我没有更改任何一行C代码,也没有更改任何一行Java代码)。我实际上指的是链接中关于禁用NDK
插件以试图清除突出显示的代码的第3项。@Onik哦,对不起!是的,这就是我在这期间所做的,以防止我的屏幕全部变红。。。在等待修复时:)再次感谢!我就在这条船上。经过几个小时的反复试验,在1.5.1中得到一个可接受的C++经验,然后升级到2,然后2.1,我甚至无法获得代码格式在本地工作。幸运的是,我在搬家前得到了大部分javah签名。1.5.1甚至在包装阵列访问方面都非常酷。2.x使格式化成为猪耳朵。长期专业的本机支持将在下一次更新中提供。好的。能帮忙吗?@Onik嗨,非常感谢。但这并没有帮助,因为这个链接显示了如何使C代码签名符合默认的JNI映射(基本上包括以与Java类的完全限定名+本机函数方法匹配的方式命名C代码函数)。我在这里所做的是不同的:我使用在JNI启动时调用的JNI_Onload()
C函数中声明的显式匹配。奇怪的是,它用于Studio 1.5(我没有更改任何一行C代码,也没有更改任何一行Java代码)。我实际上指的是链接中关于禁用NDK
插件以试图清除突出显示的代码的第3项。@Onik哦,对不起!是的,这就是我在这期间所做的,以防止我的屏幕全部变红。。。在等待修复时:)再次感谢!我就在这条船上。经过几个小时的反复试验,在1.5.1中得到一个可接受的C++经验,然后升级到2,然后2.1,我甚至无法获得代码格式在本地工作。幸运的是,我在搬家前得到了大部分javah签名。1.5.1甚至在包装阵列访问方面都非常酷。2.x使格式化成为猪耳朵。长期专业的本机支持将在下一次更新中提供。是的,我现在运行的是3.1.4,现在仍然是这样,关于JNIEXPORT和JNICALL以及ANSI标准中所有内容的投诉包括文件(带有Cmake),红色下划线。编译工作没有问题,但是编辑器警报很好,但没有不可用的情况,因为它会对所有内容发出警告(声称JNIEXPORT和JNICALL是Microsoft的东西)。您的NDK包也是最新的吗?这可能是原因。可能是配置来自AS2时代的hello jni?@JanBergström很难说,这很奇怪。在本机代码中设置断点时是否也会遇到问题?我记得我有两个问题,如果我没有弄错的话,这两个问题都是同时解决的。断点有效,调试(所有数据都显示正常)有效,编译有效,但编辑器对ANSI库和jni.h中的所有标准函数都打上了红色标记。也就是说,本地定义的东西,如位掩码(define _int64)是MS stuff not supported等。本地定义的NULL不是红色下划线,而是红色文本。编辑器的右侧像一条红线。(就像AS 3.1.4(以及许多早期版本)编辑器找不到包含文件,但编译器找到了。我运行的是AS 3.1.4,它仍然是