【问题标题】:Android Q execute binary file on release buildAndroid Q 在发布版本上执行二进制文件
【发布时间】:2020-06-16 23:56:11
【问题描述】:
public String getBinaryFileName(Context context) {
    String[] abis = Build.SUPPORTED_ABIS;
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
        // this part is working fine for pre-q android
        return name;
    else
         //Android Q does not allow executing files outside lib folder
         for (String abi : abis) {
            String name = context.getApplicationInfo().nativeLibraryDir + "/binary" + "." + abi + ".so";
            File executable = new File(name);
            if (executable.exists())
               return name;
         }
    return null;
}

我有这段代码试图获取可执行二进制文件的名称,以便以后执行它。该代码在 Q 之前的 Android 设备上运行良好,在 Android Q 设备上以调试模式执行时也运行良好,但在发布模式下执行时返回null

我为此添加了一些日志记录,在发布模式下,nativeLibraryDir 中似乎不存在该文件。

对于原生的东西我不是很擅长,我真的无法理解这里发生了什么。

尝试将清单中的android:extractNativeLibs 设置为值truefalse 我还按照一些建议在gradle.propreties 文件中尝试了android.bundle.enableUncompressedNativeLibs=false

但什么都没有!请帮忙。

【问题讨论】:

    标签: android java-native-interface android-native-library


    【解决方案1】:

    幸运的是,我发现我必须在文件名的开头添加lib

    String name = context.getApplicationInfo().nativeLibraryDir + "/libbinary" + "." + abi + ".so";
    

    我不知道为什么!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多