Android Q 在发布版本上执行二进制文件
Android Q execute binary file on release build
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 设备上以调试模式执行时也能正常工作,但在 returns null
中执行时释放模式。
我为此添加了一些日志记录,在发布模式下 nativeLibraryDir
中似乎该文件不存在。
我对原生的东西不是很在行,我真的搞不懂这是怎么回事。
试图将清单中的 android:extractNativeLibs
设置为值 true
或 false
我也按照一些建议
在 gradle.propreties
文件中尝试了 android.bundle.enableUncompressedNativeLibs=false
但是什么都没有!请帮忙。
幸运的是,我发现我必须在文件名的开头添加 lib
:
String name = context.getApplicationInfo().nativeLibraryDir + "/libbinary" + "." + abi + ".so";
我不知道为什么!
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 设备上以调试模式执行时也能正常工作,但在 returns null
中执行时释放模式。
我为此添加了一些日志记录,在发布模式下 nativeLibraryDir
中似乎该文件不存在。
我对原生的东西不是很在行,我真的搞不懂这是怎么回事。
试图将清单中的 android:extractNativeLibs
设置为值 true
或 false
我也按照一些建议
gradle.propreties
文件中尝试了 android.bundle.enableUncompressedNativeLibs=false
但是什么都没有!请帮忙。
幸运的是,我发现我必须在文件名的开头添加 lib
:
String name = context.getApplicationInfo().nativeLibraryDir + "/libbinary" + "." + abi + ".so";
我不知道为什么!