骁龙801是armeabi v7a下载 免费,rmeabi-v7a,arm64-v8a里的哪一种?

今天看啥 热点:
Windows7中搭建Android x86_64及armv8-a操作步骤,x86_64armv8-a
1.&&&&&&&&从/tools/sdk/ndk/index.html 下载android-ndk-r10d-windows-x86_64.exe 和 android-ndk-r10d-linux-x86_64.bin;2.&&&&&&&&在Ubuntu1404 64位中通过终端安装ndkr10d:./android-ndk-r10d-linux-x86_64.3.&&&&&&&&通过命令sudo& vi& /etc/profile,打开profile文件,在此文件最后加入export NDKROOT=/home/spring/ndk/android-ndk-r10d
export PATH=$NDKROOT:$PATH
export NDKBIN=/home/spring/ndk/android-ndk-r10d/toolchains/aarch64-linux-android-4.9/prebuilt/linux-86_64/bin4.&&&&&&&&重启ubuntu,输入ndk-build,显示android ndk等相关信息,说明配置NDK成功;5.&&&&&&&&在windows上安装android-ndk-r10d-windows-x86_64.exe,安装到D:/ProgramFiles/Android/android-sdk/目录下;6.&&&&&&&&通过SDK Manager.exe下载5.0.1或5.1 SDK;7.&&&&&&&&在windows下需要修改Cygwin中/.bash_profile配置,添加ndkr10d路径:ANDROID_NDK_ROOT=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r10d
PATH=/cygdrive/d/ProgramFiles/Android/android-sdk/android-ndk-r10d:/cygdrive/d/Soft/Java/eclipse/plugins/org.apache.ant_1.8.4.v/bin:$PATH8.&&&&&&&&若编译x86_64,则需将Application.mk中的APP_ABI赋值为:APP_ABI := x86_649.&&&&&&&&若编译armv8-a,则需将Application.mk中的APP_ABI赋值为:APP_ABI := arm64-v8a10.&&&&其它基础操作步骤可以参考:(1)、http://blog.csdn.net/fengbingchun/article/details/ ; (2)、http://blog.csdn.net/fengbingchun/article/details/ ; (3)、http://blog.csdn.net/fengbingchun/article/details/ ;11.&&&&APP_ABI目前能取得值包括:(1)、32位:armeabi、armeabi-v7a、x86、mips;(2)、64位:arm64-v8a,x86_64, mips64;12. &注意事项:(1)、目前模拟器只有x86_64的没有arm64-v8a的;(2)、在用真机测试armv8-a时,最好先通过adb shell, cat& /proc/cpuinfo ,来查看下真机是否是支持armv8-a;(3)、arm32和arm64有些配置参数不能共存,如-msoft-float仅在arm32位下支持,在arm64位下是不支持的.
相关搜索:
相关阅读:
相关频道:
Android教程最近更新android(145)
aMap高德地图,AMap_3DMap_V3.3.2_.jar,官方提供的so包只有两种:arm64-v8a,armeabi,也就是说除了arm64-v8a,armeabi两种cpu架构,其他CPU架构的手机显示高德地图都会奔溃:
java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file
couldn't find "libgdinamapv4sdk752.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
at com.autonavi.amap.mapcore.MapCore.(MapCore.java:60)
at com.amap.api.mapcore.AMapDelegateImp.(AMapDelegateImp.java:291)
at com.amap.api.mapcore.j.(AMapGLSurfaceView.java:23)
at com.amap.api.mapcore.j.(AMapGLSurfaceView.java:17)
at com.amap.api.mapcore.as.a(MapFragmentDelegateImp.java:137)
at com.amap.api.maps.MapView.onCreate(MapView.java:121)
在我的(插件及而修复集一身的app)项目中,有一个方法
在这段代码中:
String libPath = getFilesDir().getAbsolutePath() + "/lib/" + packageName + "_" +
plugClassLoder = PlugClassLoder.plugClassLoderCache.get(dexPath);
if (plugClassLoder==null) {
ZipInputStream zipIn = null;
int readedBytes = 0;
byte buf[] = new byte[4096];
new File(libPath).mkdirs();
zipIn = new ZipInputStream(new BufferedInputStream(new FileInputStream(dexPath)));
ZipEntry zipEntry = null;
while ((zipEntry = zipIn.getNextEntry()) != null) {
String name = zipEntry.getName();
if (!TextUtils.isEmpty(name)) {
if (name.startsWith("lib/" + Build.CPU_ABI + "/")) {
String fileName = name.substring(name.lastIndexOf("/")+1,name.length());
FileOutputStream fileOut = new FileOutputStream(new File(libPath,fileName));
while ((readedBytes = zipIn.read(buf)) & 0) {
fileOut.write(buf, 0, readedBytes);
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
zipIn.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
zipIn.closeEntry();
} catch (Exception e) {
plugClassLoder = new PlugClassLoder(dexPath,context.getCacheDir().getAbsolutePath(),libPath,context.getClassLoader());
可见,apk文件中,只需要提取Build.CPU_ABI对应的so文件,所以非手机的so文件都是无法使用的,如果你的项目使用这个版本的高德地图,有几个对策:
1. 等待官方提供其他cpu架构的so文件
2. 改为其他地图sdk(百度地图支持度比较好)
3. 判断兼容性,所其他操作:
if (Build.CPU_ABI.equals("armeabi") || Build.CPU_ABI.equals("arm64-v8a")) {
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:56122次
积分:1549
积分:1549
排名:第17856名
原创:83篇
转载:125篇
(1)(2)(4)(2)(4)(2)(9)(7)(6)(9)(12)(14)(9)(9)(13)(13)(17)(20)(16)(21)(19)关于Android的.so文件你所需要知道的 - 简书
下载简书移动应用
写了165089字,被1404人关注,获得了782个喜欢
关于Android的.so文件你所需要知道的
@author ASCE1885的
早期的Android系统几乎只支持ARMv5的CPU架构,你知道现在它支持多少种吗?7种!
Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。
应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。在Android系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64。
为什么你需要重点关注.so文件
如果项目中使用到了NDK,它将会生成.so文件,因此显然你已经在关注它了。如果只是使用Java语言进行编码,你可能在想不需要关注.so文件了吧,因为Java是跨平台的。但事实上,即使你在项目中只是使用Java语言,很多情况下,你可能并没有意识到项目中依赖的函数库或者引擎库里面已经嵌入了.so文件,并依赖于不同的ABI。
例如,项目中使用RenderScript支持库,OpenCV,Unity,android-gif-drawable,SQLCipher等,你都已经在生成的APK文件中包含.so文件了,而你需要关注.so文件。
Android应用支持的ABI取决于APK中位于lib/ABI目录中的.so文件,其中ABI可能是上面说过的七种ABI中的一种。
这个应用可以帮助我们理解手机上安装的APK用到了哪些.so文件,以及.so文件来源于哪些函数库或者框架。
当然,我们也可以自己对app反编译来获取这些信息,不过相对麻烦一些。
很多设备都支持多于一种的ABI。例如ARM64和x86设备也可以同时运行armeabi-v7a和armeabi的二进制包。但最好是针对特定平台提供相应平台的二进制包,这种情况下运行时就少了一个模拟层(例如x86设备上模拟arm的虚拟层),从而得到更好的性能(归功于最近的架构更新,例如硬件fpu,更多的寄存器,更好的向量化等)。
我们可以通过Build.SUPPORTED_ABIS得到根据偏好排序的设备支持的ABI列表。但你不应该从你的应用程序中读取它,因为Android包管理器安装APK时,会自动选择APK包中为对应系统ABI预编译好的.so文件,如果在对应的lib/ABI目录中存在.so文件的话。
App中可能出错的地方
处理.so文件时有一条简单却并不知名的重要法则。
你应该尽可能的提供专为每个ABI优化过的.so文件,但要么全部支持,要么都不支持:你不应该混合着使用。你应该为每个ABI目录提供对应的.so文件。
当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。在x86设备上,libs/x86目录中如果存在.so文件的话,会被安装,如果不存在,则会选择armeabi-v7a中的.so文件,如果也不存在,则选择armeabi目录中的.so文件(因为x86设备也支持armeabi-v7a和armeabi)。
其他地方也可能出错
当你引入一个.so文件时,不止影响到CPU架构。我从其他开发者那里可以看到一系列常见的错误,其中最多的是"UnsatisfiedLinkError","dlopen: failed"以及其他类型的crash或者低下的性能:
使用android-21平台版本编译的.so文件运行在android-15的设备上
使用NDK时,你可能会倾向于使用最新的编译平台,但事实上这是错误的,因为NDK平台不是后向兼容的,而是前向兼容的。推荐使用app的minSdkVersion对应的编译平台。
这也意味着当你引入一个预编译好的.so文件时,你需要检查它被编译所用的平台版本。
混合使用不同C++运行时编译的.so文件
.so文件可以依赖于不同的C++运行时,静态编译或者动态加载。混合使用不同版本的C++运行时可能导致很多奇怪的crash,是应该避免的。作为一个经验法则,当只有一个.so文件时,静态编译C++运行时是没问题的,否则当存在多个.so文件时,应该让所有的.so文件都动态链接相同的C++运行时。
这意味着当引入一个新的预编译.so文件,而且项目中还存在其他的.so文件时,我们需要首先确认新引入的.so文件使用的C++运行时是否和已经存在的.so文件一致。
没有为每个支持的CPU架构提供对应的.so文件
这一点在前文已经说到了,但你应该真的特别注意它,因为它可能发生在根本没有意识到的情况下。
例如:你的app支持armeabi-v7a和x86架构,然后使用Android Studio新增了一个函数库依赖,这个函数库包含.so文件并支持更多的CPU架构,例如新增android-gif-drawable函数库:
compile ‘pl.droidsonroids.gif:android-gif-drawable:1.1.+’
发布我们的app后,会发现它在某些设备上会发生Crash,例如Galaxy S6,最终可以发现只有64位目录下的.so文件被安装进手机。
解决方案:重新编译我们的.so文件使其支持缺失的ABIs,或者设置
ndk.abiFilters
显示指定支持的ABIs。
最后一点:如果你是一个SDK提供者,但提供的函数库不支持所有的ABIs,那你将会搞砸你的用户,因为他们能支持的ABIs必将只能少于你提供的。
将.so文件放在错误的地方
我们往往很容易对.so文件应该放在或者生成到哪里感到困惑,下面是一个总结:
Android Studio工程放在jniLibs/ABI目录中(当然也可以通过在build.gradle文件中的设置jniLibs.srcDir属性自己指定)
Eclipse工程放在libs/ABI目录中(这也是ndk-build命令默认生成.so文件的目录)
AAR压缩包中位于jni/ABI目录中(.so文件会自动包含到引用AAR压缩包的APK中)
最终APK文件中的lib/ABI目录中
通过PackageManager安装后,在小于Android 5.0的系统中,.so文件位于app的nativeLibraryPath目录中;在大于等于Android 5.0的系统中,.so文件位于app的nativeLibraryRootDir/CPU_ARCH目录中。
只提供armeabi架构的.so文件而忽略其他ABIs的
所有的x86/x86_64/armeabi-v7a/arm64-v8a设备都支持armeabi架构的.so文件,因此似乎移除其他ABIs的.so文件是一个减少APK大小的好技巧。但事实上并不是:这不只影响到函数库的性能和兼容性。
x86设备能够很好的运行ARM类型函数库,但并不保证100%不发生crash,特别是对旧设备。64位设备(arm64-v8a, x86_64, mips64)能够运行32位的函数库,但是以32位模式运行,在64位平台上运行32位版本的ART和Android组件,将丢失专为64位优化过的性能(ART,webview,media等等)。
以减少APK包大小为由是一个错误的借口,因为你也可以选择在应用市场上传指定ABI版本的APK,生成不同ABI版本的APK可以在build.gradle中如下配置:
enable true
include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for
universalApk true //generate an additional APK that contains all the ABIs
// map for the version code
project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9]
android.applicationVariants.all { variant -&
// assign different version code for each output
variant.outputs.each { output -&
output.versionCodeOverride =
project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode
欢迎关注我的微信公众号
~~攒钱买一杯张三疯欧式奶茶~~
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
android开发技巧,原理解析等等
· 16674人关注
Android老鸟给新人的建议、资源。
· 8882人关注
干货技术文。
· 2826人关注
~~攒钱买一杯张三疯欧式奶茶~~
选择支付方式:阅读(2648)
阳光小强参加了CSDN博客之星评选,如果阳光小强的博客对你有所帮助,在这里恳请投上您宝贵的一票,每天都可以投:一、什么是JNIJNI是Java Native Interface的缩写(Java本地调用),Java程序中的函数可以调用Native语言写的函数(一般指的是C/C++编写的函数),Native语言写的函数可以调用Java层的函数。二、为什么要有JNIJava语言的跨平台是因为在不同平台上可以运行Java虚拟机,而虚拟机是跑在具体平台上的,而本质上Java是通过JNI技术实现的跨平台,很多基层的模块在Java语言诞生之前已经有了比较优秀的实现,为了避免重复造轮子所以我们要使用JNI技术来使用已有的模块。三、Mac OS上的环境搭建在这里说明一下Max OS上的所需环境搭建,Windows和Linux的请搜索相关资料。1、安装JDK(此处省略)。2、安装ADT(Android Develop Tools),包括SDK和ADT插件,下载地址:3、安装Xcode可以去苹果商店下载安装(免费)。4、安装Apache ANT(下载地址:)详细安装过程可以参考:http://blog.csdn.net/song_hui_xiang/article/details/5、安装GNU Make(默认已经安装,所以不用安装)可以使用 make -version命令验证是否安装。6、安装NDK(下载地址:),解压后在用户根目录下新建文件.bash_profile然后添加如下两行(配置环境变量,可以暂时不配置)。export ANDROID_NDK_HOME=/Users/lixiaoqiang/Documents/install_tools/ndk/android-ndk-r10c
export PATH=${PATH}:${ANDROID_NDK_HOME}注意:后面的地址是你解压后的目录关于上面部分开发工具简要介绍:1、Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。2、NDK是Android原生开发工具包,可以支持C/C++等原生编程语言开发Android应用,它提供头文件、库和交叉编译工具链。四、第一个示例程序转载请说明出处:1、为eclipse指定NDK路径2、导入Android NDK中的示例代码(导入hello-jni工程),做过Android开发的朋友应该很熟悉,这里就不啰嗦了。3、向项目中添加原生支持项目——&右击——&Android Tools——&Add Native Support该项目其实已经包含了一个原生项目,所以这一步可以跳过,我们直接Finish继续。4、插上手机(模拟器太慢了,建议使用真机)运行项目。在C/C++界面视图我们可以看到如下信息**** Build of configuration Default for project HelloJni ****
/Users/lixiaoqiang/Documents/install_tools/ndk/android-ndk-r10c/ndk-build all
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 3 in ./AndroidManifest.xml
[arm64-v8a] Gdbserver
: [aarch64-linux-android-4.9] libs/arm64-v8a/gdbserver
[arm64-v8a] Gdbsetup
: libs/arm64-v8a/gdb.setup
[x86_64] Gdbserver
: [x86_64-4.9] libs/x86_64/gdbserver
[x86_64] Gdbsetup
: libs/x86_64/gdb.setup
[mips64] Gdbserver
: [mips64el-linux-android-4.9] libs/mips64/gdbserver
[mips64] Gdbsetup
: libs/mips64/gdb.setup
[armeabi-v7a] Gdbserver
: [arm-linux-androideabi-4.6] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup
: libs/armeabi-v7a/gdb.setup
[armeabi] Gdbserver
: [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
[armeabi] Gdbsetup
: libs/armeabi/gdb.setup
[x86] Gdbserver
: [x86-4.6] libs/x86/gdbserver
[x86] Gdbsetup
: libs/x86/gdb.setup
[mips] Gdbserver
: [mipsel-linux-android-4.6] libs/mips/gdbserver
[mips] Gdbsetup
: libs/mips/gdb.setup
[arm64-v8a] Compile
: hello-jni &= hello-jni.c
[arm64-v8a] SharedLibrary
: libhello-jni.so
[arm64-v8a] Install
: libhello-jni.so =& libs/arm64-v8a/libhello-jni.so
[x86_64] Compile
: hello-jni &= hello-jni.c
[x86_64] SharedLibrary
: libhello-jni.so
[x86_64] Install
: libhello-jni.so =& libs/x86_64/libhello-jni.so
[mips64] Compile
: hello-jni &= hello-jni.c
[mips64] SharedLibrary
: libhello-jni.so
[mips64] Install
: libhello-jni.so =& libs/mips64/libhello-jni.so
[armeabi-v7a] Compile thumb
: hello-jni &= hello-jni.c
[armeabi-v7a] SharedLibrary
: libhello-jni.so
[armeabi-v7a] Install
: libhello-jni.so =& libs/armeabi-v7a/libhello-jni.so
[armeabi] Compile thumb
: hello-jni &= hello-jni.c
[armeabi] SharedLibrary
: libhello-jni.so
[armeabi] Install
: libhello-jni.so =& libs/armeabi/libhello-jni.so
[x86] Compile
: hello-jni &= hello-jni.c
[x86] SharedLibrary
: libhello-jni.so
[x86] Install
: libhello-jni.so =& libs/x86/libhello-jni.so
[mips] Compile
: hello-jni &= hello-jni.c
[mips] SharedLibrary
: libhello-jni.so
[mips] Install
: libhello-jni.so =& libs/mips/libhello-jni.so
**** Build Finished ****这个过程其实就是在构建原生组件并和Java应用程序打包的过程。此时在我们手机上就可以看到一行文字五、项目结构及主要目录介绍1、jni目录:包含原生组件的源代码及描述原生组件构建方法的Make文件(Android.mk),该目录作为NDK构建项目时的构建目录。2、libs目录:包含指定目标平台的独立子目录,在打包时该目录被包含在apk文件中。3、obj目录:这是一个中间目录,编译源码后产生的目标文件都保存在该目录下,我们最好不用访问该目录。六、 实例工程解析Android.mk的内容如下# Copyright (C) 2009 The Android Open Source Project
# Licensed under the Apache License, Version 2.0 (the &License&);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an &AS IS& BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE
:= hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)有关Makefile的知识请参考我的另一篇博文:http://blog.csdn.net/dawanganban/article/details/第一行:Android.mk文档必须以LOCAL_PATH变量的定义开头,my-dir是一个系统的宏定义,来定义源文件的目录位置。第二行:Android构建系统将CLEAR_VARS变量设置为clear-vars.mk片段的位置,更多片段的makefile文件请看ndk\build\core目录,如下:作用是清除除了LOCAL_PATH以外的LOCAL_&name&变量,这样可以避免冲突。第三行:每一个原生组件被称为一个模块,LOCAL_MODULE变量用来给这些模块设定一个唯一的名称。第四行:LOCAL_SRC_FILES变量定义用来建立和组装这个模块的源文件列表,用空格隔开。第五行:指明了build-shared-library.mk文件的保存位置,该片段包含了将源文件构建成共享库的必要过程。下面我们来看看HelloJni.java/*
* Copyright (C) 2009 The Android Open Source Project
* Licensed under the Apache License, Version 2.0 (the &License&);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an &AS IS& BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
package com.example.
import android.app.A
import android.widget.TextV
import android.os.B
public class HelloJni extends Activity
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
/* Create a TextView and set its content.
* the text is retrieved by calling a native
* function.
tv = new TextView(this);
tv.setText( stringFromJNI() );
setContentView(tv);
/* A native method that is implemented by the
* 'hello-jni' native library, which is packaged
* with this application.
public native String
stringFromJNI();
/* This is another native method declaration that is *not*
* implemented by 'hello-jni'. This is simply to show that
* you can declare as many native methods in your Java code
* as you want, their implementation is searched in the
* currently loaded native libraries only the first time
* you call them.
* Trying to call this function will result in a
* java.lang.UnsatisfiedLinkError exception !
public native String
unimplementedStringFromJNI();
/* this is used to load the 'hello-jni' library on application
* startup. The library has already been unpacked into
* /data/data/com.example.hellojni/lib/libhello-jni.so at
* installation time by the package manager.
System.loadLibrary(&hello-jni&);
}从上面可以看到调用了原生的stringFromJNI()方法,使用关键字native来通知Java编译器,这个是用另一种语言实现的,再通过加装共享库(static语句块)hello-jni来告诉虚拟机原生方法的具体实现。java.lang.System类提供了两个静态方法,load和loadLibrary用来运行时加载共享库。下面我们来看看具体的实现。#include &string.h&
#include &jni.h&
/* This is a trivial JNI example where we use a native method
* to return a new VM String. See the corresponding Java source
* file located at:
apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#if defined(__ARM_PCS_VFP)
#define ABI &armeabi-v7a/NEON (hard-float)&
#define ABI &armeabi-v7a/NEON&
#if defined(__ARM_PCS_VFP)
#define ABI &armeabi-v7a (hard-float)&
#define ABI &armeabi-v7a&
#define ABI &armeabi&
#elif defined(__i386__)
#define ABI &x86&
#elif defined(__x86_64__)
#define ABI &x86_64&
#elif defined(__mips64)
/* mips64el-* toolchain defines __mips__ too */
#define ABI &mips64&
#elif defined(__mips__)
#define ABI &mips&
#elif defined(__aarch64__)
#define ABI &arm64-v8a&
#define ABI &unknown&
return (*env)-&NewStringUTF(env, &Hello from JNI !
Compiled with ABI & ABI &.&);
}第一个参数JNIEnv是指向可用JNI函数表的接口指针,第二个参数jobject是HelloJni类实例的java对象。最后一句代码是用c字符串创建UTF-8的Java字符串。
阅读排行榜ndk 编译 arm64 v8a
Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C++社区中影响甚大,是不折不扣的“准”标准库.Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关.大部分boost库功能的使用只需包括相应头文件即可, ...
在eclipse工程目录下建立一个jni的文件夹. 在jni文件夹中建立Android.mk和Application.mk文件. Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk.
Application.mk文件:
前面一篇文章简单地介绍了Android ndk编译的一些命令行参数,一般情况下,我们都是在Android工程的jni目录下编译本地代码,或许用不到那些参数,但是如果你需要将一些第三方C/C++库,如ffmpeg.libjpeg等,编译为Android可使用的静态库/动态库,那么,你就得尝试在这些第三方库的源码目录中,配置Android的编译环境,使用NDK提供的交叉编译该工 ...
在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件
Android.mk文件:
Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk.
Application. ...
之前由于工作原因使用grails这个基于groovy的框架做项目,对groovy感觉很好. 基于groovy的gradle构建系统对我而言自然也是好的没得说. Android Studio 正式版出来没多久,不完善的地方自然很多,对于从eclipse转来的伙伴们而言,不了解groovy的话对于gradle android的dsl自然是一头雾水,其实groovy蛮好,花点时间 ...
因为mapnik需要部分Boost模块的支持,所以需要编译Boost库.Boost直接在Windows或者Linux下编译并不难,几条指令可以搞定,但是对于交叉编译,正如本文将要阐述的使用NDK进行编译,确实是比较头疼.借助万能的Google和Baidu,我将看到的方法做以整理并进行了亲测. 不过在这之前,我想阐明一个误区,也是给自己补了个课.就是Boost库在使用的时候, ...
Android android的armeabi跟armeabi-v7a 网友分享于:6
浏览:867次 android的armeabi和armeabi-v7a 在ANE中如果SDK调用了so库,则需要把so库放到ANE下Android-ARM/lib/armeabi (调试模式)或者 armeabi-v7a(发行模式)下. 可 ...
原文链接:http://blog.csdn.net/acm2008/article/details/ 当用NDK编译的库在运行加载时报如下错:dlopen(&/data/data/xxx.xxx.xxx/lib/libxxx.so&) failed: dlopen failed: cannot locate symbol &__ ...
原文网址:http://blog.csdn.net/hxdanya/article/details/ 由于使用了NDK编译的可执行文件在应用中调用,在4.4及之前的版本上一直没出问题.最近由于要测试在Android L上的运行情况发现,当运行该可执行文件时,报如下错误:
error: only position independent executabl ...
作者:wainiwann 出处:/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
摘要:本文主要介绍将FFmpeg音视频编解码库移植到Android平台上的编译和基本测试过程.
环境准备: Ubuntu12.04 TLS a ...
我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的NDK编译出来可以在Android下面可以使用的FFmpeg动态链接库呢?写下这篇文章就是学习如何裁剪并且编译出来可以使用的动态库. 一.获取FFmpeg源码: 首先在编译之前,得 ...
cygwin安装 正确的安装步骤其实很简单:1. 下载setup-86_64.exe 2. 直接从网上下载安装,选择包时,顶部选择“default”不变 3. 搜索make,勾选make,cmake,emacs-cmake,libjepg 4. Shells这个二级目录选择“install” 5. 下一步,开始安装 6. 安装完成后调用下make命令看下是否已经安装成功(其 ...
源:android NDK编译(导入).a文件和编译多个so文件 一.编译一个静态库 libstatic_android.a
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := static_android LOCAL_SRC_FILES := libstatic_android.a inc ...
from: .cn/s/blog_01dhfa.html 因为我尝试过多个版本NDK编译,而且几次在家中与办公室WIN7 32BITS AND 64BITS间倒腾,所以多次遇到NDK_MODULE_PATH相关问题.今天才发现佳文一篇,引用如下: cocos2d-x 2.0以上版本需要设置NDK_MODULE_PA ...
Android NDK编译常见错误及解决方案 http://chinavideo.org/archiver/?tid-10821.html Error 1: $ ndk-build /cygdrive/c/andy/abc/obj/local/armeabi-v7a/objs/abc//hellow.o.d:1: * [color=#FF0000]multiple targ ...
原文网址:/blog/2164286 ndk编译出来的共享库,eclipse会自动打包到apk中,而编译出来的可执行文件则不会. 要想可执行文件自动被打包到apk中,可以把文件名改成libxxx.so的形式,伪装成so,这样就会被打包进apk. 但是每次编译之后都改一下名字,太麻烦! 写个脚本吧,又有arm, armv7,
Android内置的编解码器实在太少,于是我们需要FFmpeg.Android提供了NDK,为我们使用FFmpeg这种C语言代码提供了方便. 不过为了用NDK编译FFmpeg,还真的花费了不少时间,也得到了很多人的帮助,最应该谢谢havlenapetr.我觉得我现在这些方法算是比较简洁的了-- 下面就尽量詳細的说一下我是怎么在项目中使用FFmpeg的,但是基于我混乱的表达能 ...
在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获取到视频后,那么接下来就是解码视频,解码视频我使用的是ffmpeg,所以这张就是使用NDK编译手机可以使用的FFmpeg库. 首先到官网http://ffmpeg.org/do ...
居然是windows大小写不敏感的头文件,在linux下敏感造成include问题...还误以为是LOCAL_C_INCLUDES += $(LOCAL_PATH)/inc 的错误,吭爹啊!!! 其余都是些mfc变量的去除问题--- 解决NDK编译静态库时没反应
分类: Android |
我的这个C/C++程序, 可以成功的交叉编译到中兴,烽火的机顶盒上运行, 原以为编译到android应该也是一件简单的事情, 但是做起来远比我想象的复杂得多. 我的程序中有 .C 文件 和 .CPP 文件 , 其中 .CPP 文件中用到了 STL的string, 编译成功后死活链接不到std::string库,提示报错
undefined reference to `s ...

我要回帖

更多关于 armeabi v7a x86 的文章

 

随机推荐