缺少创建新AS项目并在安装时在我的设备上填充lib文件夹的步骤 [英] Missing step to create a new AS project and get a lib folder populated on my device upon installation
问题描述
目标
我希望安装APK时,可以从固定位置在设备上使用APK中存在的库.
根据我现有的项目,我打开了关于此问题的另一个问题 .这次,我从头开始了一个全新的项目,以减少未知数并使问题更易于解决.
我遵循的步骤
对于Android Studio 4.0.1,我可以执行以下操作:
-
开始一个新的Android Studio项目
-
选择本机C ++
-
设置项目名称以进行测试
-
选择Java作为语言
-
使用默认工具链
-
构建->制作项目
在项目视图下,我确认我的app-debug.apk
有一个lib
文件夹,其中包含几个子目录,每个子目录至少具有根据默认CMakeLists.txt规则为此项目构建的libnative-lib.so
. /p>
我希望在安装APK时可以从设备访问此.so(我有一个更复杂的项目,在其中创建.so,以便可以从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_DIR ${CMAKE_SOURCE_DIR}/libs)
添加到CMakeLists.txt
本机库不是放置在/data/data/your.app
中,而是放置在/data/app/your.aapp-<key-hash>==/lib/<ABI>
中,例如在我的目标上:
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
默认情况下,本机库也已存档且不可访问,要提取它们,需要在AndroidManifest.xml
中设置android:extractNativeLibs="true"
(例如,如下所示:another question about this issue based on my existing project. This time, I started a brand new project from scratch in order to reduce the unknowns and make my question simpler to resolve.
Steps I followed
With Android Studio 4.0.1, I do the following:
Start a new Android Studio project
Select Native C++
Set project name to test
Select Java as language
Use default toolchain
Build -> Make Project
Under the project view, I verify that my app-debug.apk
has a lib
folder containing a few subdirectories, each with at least the libnative-lib.so
that was built for this project accordingly to the default CMakeLists.txt rules.
I would like this .so to be accessible from my device when I install my APK (I have a more complex project in which I create .so that I want accessible from outside the APK).
However, from my project folder, when I run:
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
Other changes I tried
None of the following further changes allowed me to see additional files under /data/data/com.example.test
Added
android.bundle.enableUncompressedNativeLibs=false
togradle.properties
Added
android { ... sourceSets.main { jniLibs.srcDirs = ['libs'] jni.srcDirs = [] }
to
build.gradle
do not change anything to this.Added
set(distribution_DIR ${CMAKE_SOURCE_DIR}/libs)
toCMakeLists.txt
Native libraries are not placed in /data/data/your.app
but in /data/app/your.aapp-<key-hash>==/lib/<ABI>
, for example on my target:
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
Also native libraries are archived by default and can not be accessible, for extracting them it is needed to set android:extractNativeLibs="true"
in AndroidManifest.xml
(for example like here: https://github.com/nkh-lab/ndk-dlopen/blob/master/dlopen/app/src/main/AndroidManifest.xml).
这篇关于缺少创建新AS项目并在安装时在我的设备上填充lib文件夹的步骤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!