美文网首页
如何在Android Q(10)以后版本运行可执行文件

如何在Android Q(10)以后版本运行可执行文件

作者: 奔五码农 | 来源:发表于2021-12-13 15:36 被阅读0次

翻译自博客https://withme.skullzbones.com/blog/programming/execute-native-binaries-android-q-no-root/
Android10以后不再允许在app home目录(/data/data)运行可执行文件,这样就杜绝了从网络下载可执行文件之后再执行的情况,保证了系统安全性。
那么要想继续运行一些可执行文件怎么办呢?还是有办法的,就是把可执行文件打包在app内部。

  1. 在AndroidManifest.xml里面的application项里面添加下面的内容:
    android:extractNativeLibs="true"
  2. 在项目的build.gradle(:app)文件的dependencies里面添加:
    implementation fileTree(dir: "buildDir/native-libs", include: 'native-libs.jar') 并在全局task层级添加: task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') { destinationDir file("buildDir/native-libs")
    baseName 'native-libs'
    from fileTree(dir: 'mybins', include: '*/')
    into 'lib/'
    }
    tasks.withType(JavaCompile)
    {
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
    }
  3. 在项目的根目录层级创建一个新的目录mybins,并创建跟平台相关的abi目录[arm64-v8a, arm64-v8a, x86, armeabi-v7a]等,并把你的可执行文件放入这些目录,下面是目录结构:
    project-folder/
    ├─ build/
    ├─ libs/
    ├─ src/
    ├─ mybins/
    │ ├─ arm64-v8a/
    │ │ ├─ ARM 64bit Binaries
    │ ├─ arm64-v8a/
    │ │ ├─ ARM 32bit Binaries
    │ ├─ x86/
    │ │ ├─ Intel 32bit Binaries
  4. 通过下面的方式执行上面的可执行文件:
    String basedir = appContext.getApplicationInfo().nativeLibraryDir;
    Process process = Runtime.getRuntime().exec(basedir + "/<executable name>");

github上有一个方便的库,可供参考:https://github.com/jaredrummler/KtSh

相关文章

网友评论

      本文标题:如何在Android Q(10)以后版本运行可执行文件

      本文链接:https://www.haomeiwen.com/subject/zvwjfrtx.html