带有Native C Library的Android Instant App无法发布到运行Android N的设备模拟器

带有Native C Library的Android Instant App无法发布到运行Android N的设备模拟器,第1张

概述有没有办法让Android Instant App与本机C库一起使用?我正在尝试将Android Instant App发布到设备/模拟器,但遇到了我的本机C库的问题.它作为可安装的应用程序发布,但在发布为Instant App时无法找到该库.为了消除任何其他问题,我在Android Studio 3.0 (Canary 1 171.4010489)中使用新

有没有办法让Android Instant App与本机C库一起使用?

我正在尝试将AndroID Instant App发布到设备/模拟器,但遇到了我的本机C库的问题.它作为可安装的应用程序发布,但在发布为Instant App时无法找到该库.

为了消除任何其他问题,我在Android Studio 3.0 (Canary 1 171.4010489)中使用新项目向导启动了一个新项目,并选择了以下设置:

第一页:

>包括C支持检查

第二页:

>选择手机和平板电脑
>已选中AndroID Instant App支持

第六页:

> C标准设置为’C 11′
>选中例外支持(-fexceptions)
>选中运行时类型信息支持(-frtti)

生成的项目将作为可安装的应用程序发布(显示’来自C’的屏幕’),但不是即时应用程序…它给出了以下错误,它无法找到库,这是我遇到的相同错误我的实际应用项目:

找不到“libnative-lib.so”

完整错误:

05-24 17:48:30.316 7519-7519/? E/AndroIDRuntime: FATAL EXCEPTION: main     Process: com.mycompany.instantapp,PID: 7519     java.lang.UnsatisfIEdlinkError: byc[DexPathList[[zip file "/data/user/0/com.Google.androID.instantapps.supervisor/files/atom-cache/com.mycompany.instantapp/atom-download--feature-1495662507463/feature.jar"],nativelibraryDirectorIEs=[/data/user/0/com.Google.androID.instantapps.supervisor/files/native-lib/com.mycompany.instantapp,/system/lib,/vendor/lib]]] Couldn't find "libnative-lib.so"     ...

我正在粘贴下面的相关gradle文件(全部由AndroID Studio生成):

应用程序/的build.gradle:

apply plugin: 'com.androID.application'androID {    compileSdkVersion 25    buildToolsversion "26.0.0 rc2"    defaultConfig {        applicationID "com.mycompany.instantapp"        minSdkVersion 23        targetSdkVersion 25        versionCode 1        versionname "1.0"    }    buildTypes {        release {            MinifyEnabled false            proguardfiles getDefaultProguardfile('proguard-androID.txt'),'proguard-rules.pro'        }    }}dependencIEs {    implementation project(':feature')    implementation project(':base')}

碱/的build.gradle:

apply plugin: 'com.androID.feature'androID {    compileSdkVersion 25    buildToolsversion "26.0.0 rc2"    baseFeature true    defaultConfig {        minSdkVersion 23        targetSdkVersion 25        versionCode 1        versionname "1.0"    }    buildTypes {        release {            MinifyEnabled false            proguardfiles getDefaultProguardfile('proguard-androID.txt'),'proguard-rules.pro'        }    }}dependencIEs {    feature project(':feature')    compile 'com.androID.support:appcompat-v7:25.+'    compile 'com.androID.support.constraint:constraint-layout:1.0.2'}

功能/的build.gradle:

apply plugin: 'com.androID.feature'androID {    compileSdkVersion 25    buildToolsversion "26.0.0 rc2"    defaultConfig {        minSdkVersion 23        targetSdkVersion 25        versionCode 1        versionname "1.0"        testInstrumentationRunner "androID.support.test.runner.AndroIDJUnitRunner"        externalNativeBuild {            cmake {                cppFlags "-std=c++11 -frtti -fexceptions"            }        }    }    buildTypes {        release {            MinifyEnabled false            proguardfiles getDefaultProguardfile('proguard-androID.txt'),'proguard-rules.pro'        }    }    externalNativeBuild {        cmake {            path "CMakeLists.txt"        }    }}dependencIEs {    compile filetree(dir: 'libs',include: ['*.jar'])    androIDTestCompile('com.androID.support.test.espresso:espresso-core:2.2.2',{        exclude group: 'com.androID.support',module: 'support-annotations'    })    implementation project(':base')    testCompile 'junit:junit:4.12'}

instantapp /的build.gradle:

apply plugin: 'com.androID.instantapp'dependencIEs {    implementation project(':feature')    implementation project(':base')}

更新:

我向Google提出了一个问题:

链接:Google Issue Tracker

虽然我觉得实现这一目标的工具已经可用(Gradle,CMake,NDK等)

还要感谢@Anirudh让我知道这是AndroID N上的一个已知问题.

发布没有C库的Instant App是否适用于我的设备?

是的…如果我创建一个仅包含AndroID Instant App支持的新AndroID Studio项目,它会发布到我的三星galaxy 7S并显示“Hello World!”屏幕.

发布已签名的APK是否有效?

生成已签名的APK有效,经过检查,本机C库与feature-deBUG.apk捆绑在一起,但不与base-deBUG.apk捆绑在一起.这是我期望的gradle配置,但没有解释为什么它不会发布到设备/模拟器.

我还没有尝试过加载这些APK …但是我怀疑甚至可能因为从未安装过即时应用程序…例如:你如何在加载它之后启动它(点击一个网址?)

向两个APK添加C库是否有效?

我已经尝试将externalNativeBuild gradle属性添加到base / build.gradle和feature / build.gradle文件中,但仍然会出现相同的错误.我通过在生成签名APK后检查feature-deBUG.apk和base-deBUG.apk来验证原生C库是否包含在两个APK中.

修改base / build.gradle:

apply plugin: 'com.androID.feature'androID {    compileSdkVersion 25    buildToolsversion "26.0.0 rc2"    baseFeature true    defaultConfig {        minSdkVersion 23        targetSdkVersion 25        versionCode 1        versionname "1.0"        externalNativeBuild {            cmake {                cppFlags "-std=c++11 -frtti -fexceptions"            }        }    }    buildTypes {        release {            MinifyEnabled false            proguardfiles getDefaultProguardfile('proguard-androID.txt'),'proguard-rules.pro'        }    }    externalNativeBuild {        cmake {            path "../feature/CMakeLists.txt"        }    }}dependencIEs {    feature project(':feature')    compile 'com.androID.support:appcompat-v7:25.+'    compile 'com.androID.support.constraint:constraint-layout:1.0.2'}
最佳答案

Does publishing a signed APK work?

AndroID Studio 3.0预览生成签名APK功能目前有一个错误,其中最终的zip不包含所有功能apks.在每个要素模块的gradle文件中使用Gradle SigningConfig对要素apks进行签名

Does adding the C++ library to both APKs work?

不需要.添加基本​​功能apk应该足够了

实际崩溃是AndroID M / N上针对AndroID Instant Apps的NDK支持的已知问题.该应用程序适用于AndroID O模拟器

总结

以上是内存溢出为你收集整理的带有Native C Library的Android Instant App无法发布到运行Android N的设备/模拟器全部内容,希望文章能够帮你解决带有Native C Library的Android Instant App无法发布到运行Android N的设备/模拟器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1139498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存