Android 缺少创建新AS项目并在安装时在我的设备上填充lib文件夹的步骤 目标

Android 缺少创建新AS项目并在安装时在我的设备上填充lib文件夹的步骤 目标,android,android-studio,java-native-interface,apk,Android,Android Studio,Java Native Interface,Apk,我希望在安装APK时,APK中的LIB可以从固定位置在设备上使用 我根据我现有的项目打开了。这一次,我从头开始了一个全新的项目,以减少未知因素,使我的问题更容易解决 我遵循的步骤 使用Android Studio 4.0.1,我将执行以下操作: 启动一个新的Android Studio项目 选择本机C++ 设置要测试的项目名称 选择Java作为语言 使用默认工具链 构建->制作项目 在项目视图下,我验证我的app debug.apk是否有一个lib文件夹,其中包含几个子目录,每个

我希望在安装APK时,APK中的LIB可以从固定位置在设备上使用

我根据我现有的项目打开了。这一次,我从头开始了一个全新的项目,以减少未知因素,使我的问题更容易解决

我遵循的步骤 使用Android Studio 4.0.1,我将执行以下操作:

  • 启动一个新的Android Studio项目

  • 选择本机C++

  • 设置要测试的项目名称

  • 选择Java作为语言

  • 使用默认工具链

  • 构建->制作项目

在项目视图下,我验证我的
app debug.apk
是否有一个
lib
文件夹,其中包含几个子目录,每个子目录至少有
libnative lib.so
,该文件夹是根据默认的CMakeLists.txt规则为此项目构建的

我希望这样。这样在我安装APK时可以从我的设备访问(我有一个更复杂的项目,我在其中创建。所以我希望可以从APK外部访问)

但是,在我的项目文件夹中,当我运行时:

c:\Users\xxx\AndroidStudioProjects\test>adb install app\build\outputs\apk\debug\app-debug.apk
Performing Streamed Install
Success

c:\Users\xxx\AndroidStudioProjects\test>adb shell ls /data/data/com.example.test
cache
code_cache
我尝试过的其他改变 以下任何进一步的更改都不允许我在
/data/data/com.example.test

  • 添加了
    android.bundle.enableUncompressedNativeLibs=false
    gradle.properties

  • 增加

    android {
        ...
        sourceSets.main {
            jniLibs.srcDirs = ['libs']
            jni.srcDirs = []
        }
    
    build.gradle
    不要对此进行任何更改

  • set(distribution\u DIR${CMAKE\u SOURCE\u DIR}/libs)
    添加到
    CMakeLists.txt


本机库不是放在
/data/data/your.app
中,而是放在
/data/app/your.aapp-==/lib/)中。

谢谢。这确实是我观察到的,也是我为什么问“固定地点”的原因。该散列不实用,因为它每次都会更改,并且很难预测,除非搜索整个/data/app/文件夹并选择包含与包名称匹配的字符串的文件夹。没有办法禁用散列吗?也,我在同一台设备上安装了其他APK,它们将lib文件夹及其内容解压缩到/data/data/下,所以我希望我可以复制这种行为。但我猜这些其他APK在任何情况下都安装在
data/app/your.aapp-==/lib/
中,但在这之后,它们只是在它们的设备中复制或创建相应的内容内部存储器
数据/data/your.aapp
。在应用程序首次运行期间,您还可以尝试将库从安装目录复制到内部存储。是的,这些其他APK也安装在/data/app下。“在应用程序首次运行期间,您还可以尝试将库从安装目录复制到内部存储。”这对我来说肯定有效,但我的应用程序如何知道此/data/app//lib文件夹的路径?你们知道在我的Java应用程序代码中或者在我的原生C语言中该路径是如何表达的吗?这里的例子是如何从Java中获取本机库的路径:之后你们可以通过JNI机制或者环境变量将其提供给本机。我有根访问权限。第一个链接是关于包装的。所以在APK中。就我而言,我的LIB已经在APK中了。第二个环节是我自己的问题。第三个链接是关于项目的外部库。在这里,我只关心在安装APK时从已知位置在设备上提供我自己项目的.so。
hikey960:/ # cd /data/app/com.example.dlopen-6BSPeAN9VvjFlCxIzLHX9A\=\=/lib/arm64                                                                                     
hikey960:/data/app/com.example.dlopen-6BSPeAN9VvjFlCxIzLHX9A==/lib/arm64 # ls -als
total 1352
   4 drwxr-xr-x 2 system system    4096 2020-11-06 12:43 .
   4 drwxr-xr-x 3 system system    4096 2020-11-06 12:43 ..
1044 -rwxr-xr-x 1 system system 1067256 1981-01-01 01:01 libnative-lib.so
 300 -rwxr-xr-x 1 system system  305360 1981-01-01 01:01 libplugin.so