如何更新android studio中的ndk

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更新android studio中的ndk相关的知识,希望对你有一定的参考价值。

1、NDK开发就是JNI开发

2、先新建一个增量升级的工具类PatchUtil,定义一个本地方法patch。

AS菜单栏,依次选择Build->Make
Project。执行完之后,把Project栏切换成project视角,依次打开app->build->intermediates->classes->debug->com->winter->updetedemo->utils,可以看到该文件夹下有一个PatchUtil.class文件。com->winter->updetedemo->utils这一路径其实就是PatchUtil所在的包名,这个实际开发的时候请根据自己的包名找相应的路径。

三、然后我们用上面找到的.class文件,生成一个C/C++的头文件。首先打开AS的terminal界面

以下两个命令 cd app\\build\\intermediates\\classes\\debug javah -jni com.winter.updatedemo.utils.PatchUtil,如下图:

然后我们再看debug文件夹下,会 发现多出来一个com_winter_updatedemo_utils_PatchUtil.h文件,

(这就是我们需要的头文件)

文件的内容打开看:

里面声明了一个函数JNIEXPORT jint JNICALL
Java_com_winter_updatedemo_utils_PatchUtil_patch(JNIEnv *, jobject,
jstring, jstring,
jstring);这个函数就是PatchUtil类里面本地方法的C实现。当然头文件里只是一个函数声明,接下来就要实现这个函数。

四、建立jni文件夹,把生成的头文件拷贝进去。在app\\src\\main文件夹下右键,依次选择New->Folder->JNI
Folder,然后main文件夹下会生成一个新的文件夹jni,先把头文件拷进去。

接下来就需要用到bsdiff这个工具,bsdiff是一个开源的二进制差分工具,用来生成增量升级所需的差分包;与其相对应的bspatch则用来通过差分包合成新的APK包。对于客户端而言,只需要完成bspatch的功能就可以了,bsdiff的功能一般由服务端实现。另外,bsdiff依赖bzip2,所以分别把两个工具下载下来。bsdiff下载地址:bsdiff下载地址bzip2下载地址:bzip2下载地址bzip2解压后又很多文件,但是用到的并不多,所以在jni文件夹下新建一个文件夹,把一下文件拷贝进去:

然后把bspatch.c文件考到jni文件夹下。然后做以下修改:1.找到第31行#include ,改成#include "bzip2/bzlib.h"2.在37行下面添加一行,新行内添加之前生成的头文件
#include
"com_winter_updatedemo_utils_PatchUtil.h"3.把main()函数的名称修改掉,改成applypatch()或其他名称4.在bspatch.c文件末尾添加以下函数:

函数的名称和参数与com_winter_updatedemo_utils_PatchUtil.h一致,其实就是PatchUtil里patch()方法的C实现。
以上步骤完成后,再在jni文件夹下新建一个Android.mk文件,文件中的内容为:

OK,jni文件夹下的工作做完了。

六、最后修改下app文件夹下的build.gradle文件,在defaultConfig代码块中添加以下内容

这里有一点需要注意,moduleName是最后编译生成库的名称,当然,最终的.so文件会加一个前缀“lib”,例如上面的代码,编译后生成的.so文件的全名会是libpatch.so。另外,回头看一下PatchUtil类中的static代码块,调用了加载库文件的系统方法,其中的库文件的名称,与moduleName是一致的,不要加任何前后缀。

七、所有的工作都结束了,patch方法已经可以被调用了,在Activity里起一个线程,调用PatchUtil.patch(),就可以进行APK包的合成了。

八、bsdiff下载地址中,除了可以下载bsdiff的源码,还可以下载windows环境下的.exe可执行文件,下载下来,就可以在本地手动生成差分包,而不需要依赖服务器了

参考技术A 1.3以后就支持NDK了建议你升级吧,目前是1.3.1版本了你自己看吧,设置这里多了个NDK的配置new File 的时候,也有c/c++选项了本回答被提问者采纳

Android studio 在哪里安装 NDK 文件? (以 zip 格式下载)

【中文标题】Android studio 在哪里安装 NDK 文件? (以 zip 格式下载)【英文标题】:Android studio Where to install NDK file? (downloaded it in zip) 【发布时间】:2017-03-21 07:41:03 【问题描述】:

我的安卓工作室说它想要更新。但是当我这样做时,我尝试更新它,但它不起作用,所以我不得不启动:C:\Users\username\AppData\Local\Android\sdk\tools\android.bat 来安装其他软件包。但是 NDK 文件不会更新,所以我从以下位置手动下载:

https://developer.android.com/ndk/downloads/index.html#download

现在我有了这个zip 文件,我应该在哪里提取文件夹?感谢您的帮助!

文件夹名称为android-ndk-r13b

【问题讨论】:

通常它作为 ndk-bundle 文件夹中的 ndk-bundle 文件夹进入。您也可以手动指定 ndk 在 Android Studio 中的位置。 要清楚,android-ndk-r13b 将重命名为 ndk-bundle 在 Android Studio 中,文件菜单 |项目结构... SDK位置 【参考方案1】:

是的,重命名提取的文件夹android-ndk-r13b(确切的名称可能很快就会过时)到ndk-bundle(你可以将NDK [和SDK 就此而言] 任何地方,如果你想留下名字不要这样做,我肯定见过硬编码子的一个案例-path),然后,将设置点指向放置位置

Android Studio, File menu | Project Structure Ctrl+Alt+Shift+s(短-cut: ctrl+Alt+Shift+s):

设置/检查以下environmental variables

NDK_HOME=C:\Android\sdk\ndk-bundle
NDK_MODULE_PATH=C:\Android\sdk\ndk-bundle

额外的东西:

在做environmental variablesSDK 的腰带和大括号)时:

ANDROID_HOME=C:\Android\sdk

对于 JDK:

JAVA_HOME=C:\Program Files\Java\jdk1.8.0_112
JAVA_PATH=C:\Program Files\Java\jre1.8.0_112\bin

JDK 是 Java 开发工具包。JRE 是 Java 运行时环境。

如果您的内存RAMGradle(700 兆字节大约是您可以达到的最低值,其他工具(如 monitor.bat)也使用此变量,它是 ubiquitous)(显然,您希望尽可能地扩大它,而不用交换使其非常构建缓慢注意下划线非常重要![这是一个保留的命名空间冲突操作符,不要让我解释它很复杂!]):

_JAVA_OPTIONS=-Xmx700m

一些链接

Setting up for Android NDK developmentAdd C and C++ Code to Your ProjectGetting Started with the NDKUsing C and C++ Code in an Android App with the NDK

【讨论】:

非常感谢 对我来说这 3 个点是不可点击的。我通过手动将“ndk.dir=C:\\Android\\sdk\\ndk-bundle”添加到 local.properties 文件解决了这个问题。【参考方案2】:

下载.zip 文件。通过SDK manager开始安装。转到%userprofile%\AppData\Local\Android\sdk\ndk-bundle并复制 .installer 文件夹到桌面并在SDK manager 中取消下载。 打开 .installer 文件夹并打开 .installationdata 文件并检查正在下载文件的文件夹,例如:% userprofile%\AppData\Local\Temp\PackageOperation01。 将下载的 .zip 文件复制到文件夹 PackageOperation01 或中列出的任何内容.installationdata 文件。现在将 .installer 文件夹从桌面复制到 %userprofile%\AppData\Local\Android\sdk\ndk-bundle 并启动 SDK manager 并再次开始安装 NDK。 @ 987654328@ 将跳过下载过程开始安装。

【讨论】:

当您的/tmp 无法容纳整个 NDK 时,这也适用于 Linux。只需下载 NDK 并将 zip 符号链接到 /tmp/PackageOperation01/[zipname] 并将较大磁盘上的文件夹符号链接到 /tmp/PackageOperation01/unzip 每当我在 SDK 管理器中取消下载时,它只会创建另一个文件夹(例如 PackageOperation02) 你是个天才:D【参考方案3】:

为了帮助那些正在使用MAC OSx的人,MAC上的过程如下:

以 zip 格式下载 ndk-bundle 运行终端

使用以下命令在 mac 中查找您的临时目录(例如 /var/folders/sp/31g4p3kd5l10c68qdy475krr0000gn/T/)

回显 $TMPDIR

将目录更改为 PackageOperation01

cd PackageOperation01

将 ndk-bundle.zip 复制到目录中

cp /path/to/ndk-bundle.zip /$TMPDIR/PackageOperation01/

启动 Android Studio 并在 SDK-Manager 中尝试再次安装 ndk-bundle。

【讨论】:

【参考方案4】:

在 Mac 中,使用 Android studio 3.3.2,SDK Manager 会不断选择新的临时文件夹来下载 ndk-bundle。以下步骤有助于安装下载的 ndk zip 文件。

    进入 SDK 管理器,开始下载 NDK。 转到~/Library/Android/sdk/ndk-bundle/.installer cat .installData

path=/var/folders/vr/mz4hsqqs0wlgj9sfcpn3wfn5g2lwk3/T/PackageOperation07

PackageOperation0X 是选择用于下载 zip 文件的临时文件夹

    将下载的android-ndk-r21d-darwin-x86_64.zip复制到这个临时文件夹(PackageOperation0X)

    ~/Library/Android/sdk/ndk-bundle 文件夹复制到其他位置

    在 SDK 管理器中取消 NDK 下载

    cd ~/Library/Android/sdk/

    您可能会发现 ndk-bundle 文件夹丢失,因为 SDK 管理器中已取消下载。

    将之前复制的ndk-bundle移动到~/Library/Android/sdk/

    进入 SDK 管理器,重新开始下载 NDK。将扫描现有文件并开始安装,跳过下载步骤。

【讨论】:

以上是关于如何更新android studio中的ndk的主要内容,如果未能解决你的问题,请参考以下文章

如何更新Android Studio

如何更新Android Studio

如何手动升级android studio?

如何在android studio中更新maven依赖

如何升级android studio的版本

Android Studio如何在颤动中删除构建方法中的行