bcm文件在汽车车身电脑bcm维修资料怎么打开?


本文目录索引
1,如何安装arm-linux-gcc编译器
2,ubuntu下怎么安装交叉编译
3,如何更改ubuntu中交叉编译工具链
4,如何在Android中使用汇编语言
5,一个工程中调用了动态链接库
怎么写cmakelists
6,cmake中target_link_libraries()使用问题动态库使用绝对路径没问题,但是使用相对路径就矬了?
7,如何安装ARM toolchain
8,如何安装ARM toolchain
9,android studio ndk怎么调用
10,android ndk 怎样调用第三方的so库文件
1,如何安装arm-linux-gcc编译器
具体安装步骤如下,首先下载安装包。1、解压文件解压 tar zxvf arm-linux-gcc-4.4.3.tar.gz -C/(直接解压后就可以,-C/会让解压的文件自动放在根目录下指定路径,不用管)下载arm-linux-gcc-4.4.3.tgz到任意的目录下,进入这个文件夹sudo tar xvzf arm-linux-gcc-4.4.3.tgz ?C /2、建立目录sudo mkdir /usr/local/arm3、复制文件sudo cp -r /opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm5、添加环境变量修改/etc/profile文件(此文件属于系统级别的环境变量,设置在里面的东西对所有用户适用)sudo gedit /etc/profile增加路径设置,在末尾添加如下:export PATH=$PATH:/usr/local/arm/4.4.3/bin。至此安装步骤到此完成。
2,ubuntu下怎么安装交叉编译
1. 下载软件包从linaro的网站下载预编译二进制包,注意选择的版本哦,我们要使用linux下的哦。选择这个:gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.bz22. 解压解压gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.xz 到 ~/arm-cross-toolchain/目录下3. 设置环境变量~$ vi .bashrc
在最后添加如下 2 行:PATH=$PATH:/home/lxl/arm-cross-toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/binexport PATH请注意,第一行的$PATH后面是英文冒号,而冒号后面是你的cross-toolchain的可执行文件目录(bin目录)的绝对路径。 这两句的意思就是将cross-toolchain的可执行文件路径加入系统环境变量PATH中。4. 使环境变量 生效~$ source .bashrc5. 测试~$ arm-linux-gnueabihf-gcc -v报错:arm-linux-gnueabihf-gcc: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
原因:64位的系统,缺少 lib32stdc++6这个包解决:~$ sudo apt-get install lib32stdc++6
3,如何更改ubuntu中交叉编译工具链
  1.下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下,我把它下载到了我的个人文件夹里 /home/wrq  2. 解压 arm-linux-gcc-3.4.1.tar.bz2
  #tar -jxvf arm-linux-gcc-3.4.1.tar.bz2  解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下  # cd usr/local/  #cp -rv arm /usr/local/  现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了  3. 修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一)  方法一:修改/etc/bash.bashrc文件  #vim /etc/bash.bashrc  在最后加上:  export PATH=$PATH:/usr/local/arm/3.4.1/bin  export PATH  方法二:修改/etc/profile文件:  # vim /etc/profile  增加路径设置,在末尾添加如下,保存/etc/profil文件:  export PATH=$PATH:/usr/local/arm/3.4.1/bin  4. 立即使新的环境变量生效,不用重启电脑:  对应方法一:#source /root/.bashrc  对应方法二:# source /etc/profile  5. 检查是否将路径加入到PATH:  # echo $PATH  显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交  叉编译环境安装完成。  6. 测试是否安装成功  # arm-linux-gcc -v  上面的命令会显示arm-linux-gcc信息和版本,显示的信息:  Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs Configured with: /work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-  3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu  --prefix=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm  -linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable  -nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-  languages=c,c++ --enable-shared --enable-c99 --enable-long-long  Thread model: posix  gcc version 3.4.1  7.编译  Hello World程序,测试交叉工具链  写下下面的Hello World程序,保存为  hello.c  #include  int main()  {  printf("Hello World!\n");  return 0;  }  执行下面的命令:  # arm-linux-gcc -o hello hello.c  源程序有错误的话会有提示,没有任何提示的话,就是通过了,就可以下载到ARM目标板上运行了!接着可以输入file hello的命令,查看生成的hello文件的类型,要注意的是生成的可执行文件只能在ARM体系下运行,不能在其于X86的PC机上运行。
4,如何在Android中使用汇编语言
 由于Android环境非常复杂,框架都是用Java,因此要使用C/C++都需要做很多配置,使用汇编的话需要做更多的工作。  我这边使用的是最新的Android4.0的开发工具,NDK也是最新支持4.0的。这个NDK与老版本的有一些比较明显的不同。  由于我用的是Mac OS X,因此配置起来比瘟抖死上的要容易许多,你不需要再装些杂七杂八的第三方工具,直接可以使用你下载好的NDK。  首先,设置目标路径――在你的Terminal中进入NDK的根目录,随后打NDK_PROJECT_PATH=""。回车,再输入export NDK_PROJECT_PATH  回车。  这里要注意的是NDK_PROJECT_PATH=后面的路径需要加引号,否则无效。  由于NDK默认支持的默认编译选项仅支持ARMv5到ARMv5TE架构,因此如果要使用比较高级的特性的话有两种方法:  1、你有办法将TARGET_ARCH_ABI的值变为armeabi-v7a,俺自己试了一下,木有成功。因此可以使用第二种方法,更简单便捷:  2、在你的NDK目录下,找到toolchains,然后找到arm-linux-androideabi-x.y.z目录,在进去可以发现setup.mk文件。找到-march=armv7-a,将上面的神马#ifdef都去掉,下面的#endif也都删了。这样就能确保编译器使用ARMv7A来编译。完成上述操作之后我们就可以先用最简单的方式来写汇编了,即内联汇编――
  static int my_thumb(int dummy)  {  __asm__("movw r0, #1001 \t\n"  "movw r12, #2020 \t\n"  "add r0, r0, r12 \t\n"  "bx lr");    return dummy;  }     jstring  Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,  jobject thiz )  {  my_thumb(0);  return (*env)->NewStringUTF(env, "Hello from JNI !");  }  
  上述代码其实就是基于NDK自带的hello-jni项目修改的。最后用ndk-build可以成功编译。
  上面一段代码是编译器默认的使用Thumb/Thumb-2编译的,因此我里面写的内联汇编的指令都是Thumb代码。  我们下面将讲述一下如何使用ARM代码并使用NEON指令集。  首先,在你的Android.mk中修改LOCAL_SRC_FILES,要将源文件名后面添加.neon后缀,比如LOCAL_SRC_FILES := hello-jni.c改成LOCAL_SRC_FILES := hello-jni.c.neon。  这里要注意的是你真正的源文件名不要修改,就修改LOCAL_SRC_FILES这个符号的值即可。  然后我们再添加新的变量,来指示ARM GCC使用ARM指令集来编译――LOCAL_ARM_MODE := arm  这样就OK了。我们修改一下代码:
  static int my_arm(int dummy)  {  __asm__("movw r0, #1001 \t\n"  "movw r12, #2020 \t\n"  "add r0, r0, r12 \t\n"  "vdup.32 q0, r0 \t\n"  "bx lr");    return dummy;  }     jstring  Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,  jobject thiz )  {  my_arm(0);  return (*env)->NewStringUTF(env, "Hello from JNI !");  }  
  使用ndk-build后能正常通过编译。最后再上个最最高端的。直接写汇编文件。NDK带有GAS工具,因此按常理,完全可以写汇编文件。一般汇编文件的后缀名为.s,因此我们创建一个xxx.s文件即可。  然后我这边创建一个叫hey.s。在Android.mk中将这个文件添加上:LOCAL_SRC_FILES += hey.s.neon  我们这里看到,为了能在汇编文件中使用NEON指令集,我们在这里也把.neon后缀添加上。汇编器的makefile也认这个标识。  我们编辑hey.s文件:
  .text.align 4.arm.globl my_real_armmy_real_arm:add r0, r0, #256vmov q0, q1vdup.32 q0, r0bx lr这里要注意的是,在Apple的汇编器中,函数名要加前缀下划线,而NDK中提供的汇编器则不需要。  我们修改一下hello-jni.c,把这函数调进去:
  extern void my_real_arm(int i);    static int my_arm(int dummy)  {  __asm__("movw r0, #1001 \t\n"  "movw r12, #2020 \t\n"  "add r0, r0, r12 \t\n"  "vdup.32 q0, r0 \t\n"  "bx lr");    return dummy;  }    jstring  Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,  jobject thiz )  {  my_real_arm(0);  my_arm(0);  return (*env)->NewStringUTF(env, "Hello from JNI !");  }    当然,我们为了确保编译器能够正确地将ARM和Thumb指令集做混合连接,我们可以在刚才的setup.mk中强制在TARGET_CFLAGS标志里加上-mthumb-interwork  在Windows操作系统中试验,终于发现,只要将Application.mk中的APP_ABI中的标志,将armeabi去掉,仅留下armeabi-v7a就能顺利使用neon了。这样不需要修改setup.mk,也不需要将Sample中的那个标志判断去掉,非常方便。  下面列一下可用的Android.mk编译配置文件:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := HelloNeonLOCAL_SRC_FILES := helloneon.cLOCAL_ARM_MODE := armTARGET_CFLAGS += -mthumb-interworkTARGET_CFLAGS += -std=gnu11TARGET_CFLAGS += -O3ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)LOCAL_CFLAGS := -DHAVE_NEON=1LOCAL_SRC_FILES += neontest.s.neonLOCAL_ARM_NEON := trueendifLOCAL_LDLIBS := -lloginclude $(BUILD_SHARED_LIBRARY)$(call import-module,cpufeatures)   在使用JNI时,只需要在你当前项目工程目录中添加jni文件夹,然后在里面根据Sample中所提供的文件布局来做即可。当你用ndk-build(Windows下要在cygwin控制台中用ndk-build.cmd)来编译时, 如果构建成功,则会在libs文件夹内生成一个libXXX.so。然后用Eclipse
ADT重新打开你的项目工程,就会发现jni文件目录以及生成好的so文件都会在你的工程文件目录中展现出来。当然,你后面也能直接在Eclipse IDE下编辑.s汇编文件,这样就更容易阅读了。  最后,在Android汇编器中如果要注释某条语句,那么必须使用C89/90中的注释符――/* ... */  用分号以及后来C++98中所引入的//形式都不管用。在最新的NDK版本android-ndk-r8d中加入了ARM-Linux GCC4.7以及当前大红大紫的LLVM Clang3.1。不过由于LLVM
Clang3.1的很多编译选项与GCC有不少区别,因此在使用Clang3.1的时候需要自己去配置相应的编译选项。这个版本的NDK默认的编译器工具链使用的是GCC4.6版本。如果要使用GCC4.7,那么可以在Application.mk文件中添加NDK_TOOLCHAIN_VERSION=4.7;如果要使用Clang3.1,那么可以在Application.mk中添加NDK_TOOLCHAIN_VERSION=clang3.1。下面给出一个合法的Application.mk的内容:
  # Build with LLVM Clang3.1#NDK_TOOLCHAIN_VERSION=clang3.1
# Build with ARM-Linux GCC4.7NDK_TOOLCHAIN_VERSION=4.7
# Build only ARMv7-A machine code.APP_ABI := armeabi-v7a
5,一个工程中调用了动态链接库 怎么写cmakelists
在工程搭建时,可能会有将静态库链接成动态库的需求,如出于代码保护的角度,某些模块会发布.a扩展名的静态库,我们要将多个这样的静态库链接成一个动态库。但与直接link目标文件不同的是,ld以默认参数执行时,并把静态库中没有用到的函数过滤掉,导致生成的so并未包含所要的函数,因此要加上--whole-archive参数,以保证所有的函数都包含在生成的so中。在使用cmake时,CMakeLists.txt的写法如下:add_library(${MODULE_NAME}SHARED${CMAKE_SOURCE_DIR}/builttime.c #要生成一个so,至少要包含一个源文件,实在没有可以把库的编译时间戳打到这儿。)
target_link_libraries(${MODULE_NAME}${${MODULE_NAME}_EXTRA_LDFLAGS}"-Wl,--whole-archive" #告诉编译器,从这里开始,所有的库的内容都包含到so中${LOCAL_MODULES} #可以是以源代码生成的静态库${PREBUILT_MODULES} #可以是预先生成的静态库"-Wl,--no-whole-archive" #告诉编译器,从这里开始,以后的库的内容不用都包含到so中)
使用相对路径的时候,你要让cmake能够搜索到找到你动态库,就像直接使用gcc/g++来链接的时候一样,要使用-L来指定第三方库所在路径。cmake可以使用 LINK_DIRECTORIES
命令来指定第三方库所在路径,比如,你的动态库在/home/myproject/libs这个路径下,则通过命令:LINK_DIRECTORIES(/home/myproject/libs),把该路径添加到第三方库搜索路径中,这样就可以使用相对路径了,使用TARGET_LINK_LIBRARIES的时候,只需要给出动态链接库的名字就行了。 拓展:
1、CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 2、只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的
Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
7,如何安装ARM toolchain
  我们有两个选择,第一是直接在 Raspberry Pi 上编译。第二是先在我们的个人电脑用 Raspberry Pi 的 toolchain 编译完成後,再上传到 Pi。  这里简介如何在个人电脑安装 Raspberry Pi 的 toolchain,以在 ubuntu 上安装 gcc-linaro-arm-linux-gnueabihf-raspbian 为例。  1. 在个人电脑安装必要的套件。  sosorry@ubuntu:~$ sudo apt-get install make git-core ncurses-dev  2. 下载最新版的 toolchain。  sosorry@ubuntu:~$ mkdir rpi  sosorry$ubuntu:~$ cd rpi  sosorry@ubuntu:~/rpi$ git clone https://github.com/raspberrypi/tools.git  remote: Reusing existing pack: 17273, done.  remote: Total 17273 (delta 0), reused 0 (delta 0)  Receiving objects: 100% (17273/17273), 311.52 MiB
343 KiB/s, done.  Resolving deltas: 100% (11698/11698), done.  Checking out files: 100% (15860/15860), done.  3. 安装 toolchain。安装方法是将 gcc-linaro-arm-linux-gnueabihf-raspbian 加到环境变数里。  sosorry@ubuntu:~/rpi$ vi ~/.bashrc  export PATH=$PATH:/home/sosorry/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin # add this line at the end of file  4. 测试。先开启一个新的终端机,输入 arm 後连续按两次 tab 键,如果跑出来一堆像下面的提示表示安装成功。  arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gfortran arm-linux-gnueabihf-objdump  arm-linux-gnueabihf-ar arm-linux-gnueabihf-gcc-4.7.2 arm-linux-gnueabihf-gprof arm-linux-gnueabihf-pkg-config  arm-linux-gnueabihf-as arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-ld arm-linux-gnueabihf-pkg-config-real  arm-linux-gnueabihf-c++ arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-ld.bfd arm-linux-gnueabihf-ranlib  arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-gcc-ranlib arm-linux-gnueabihf-ldd arm-linux-gnueabihf-readelf  arm-linux-gnueabihf-cpp arm-linux-gnueabihf-gcov arm-linux-gnueabihf-ld.gold arm-linux-gnueabihf-size  arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-gdb arm-linux-gnueabihf-nm arm-linux-gnueabihf-strings  arm-linux-gnueabihf-g++ arm-linux-gnueabihf-gdbtui arm-linux-gnueabihf-objcopy arm-linux-gnueabihf-strip
8,如何安装ARM toolchain
我们有两个选择,第一是直接在 Raspberry Pi 上编译。第二是先在我们的个人电脑用 Raspberry Pi 的 toolchain 编译完成後,再上传到 Pi。  这里简介如何在个人电脑安装 Raspberry Pi 的 toolchain,以在 ubuntu 上安装 gcc-linaro-arm-linux-gnueabihf-raspbian 为例。  1. 在个人电脑安装必要的套件。  sosorry@ubuntu:~$ sudo apt-get install make git-core ncurses-dev  2. 下载最新版的 toolchain。  sosorry@ubuntu:~$ mkdir rpi  sosorry$ubuntu:~$ cd rpi  sosorry@ubuntu:~/rpi$ git clone https://github.com/raspberrypi/tools.git  remote: Reusing existing pack: 17273, done.  remote: Total 17273 (delta 0), reused 0 (delta 0)  Receiving objects: 100% (17273/17273), 311.52 MiB
343 KiB/s, done.  Resolving deltas: 100% (11698/11698), done.  Checking out files: 100% (15860/15860), done.  3. 安装 toolchain。安装方法是将 gcc-linaro-arm-linux-gnueabihf-raspbian 加到环境变数里。  sosorry@ubuntu:~/rpi$ vi ~/.bashrc  export PATH=$PATH:/home/sosorry/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin # add this line at the end of file  4. 测试。先开启一个新的终端机,输入 arm 後连续按两次 tab 键,如果跑出来一堆像下面的提示表示安装成功。  arm-linux-gnueabihf-addr2line arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gfortran arm-linux-gnueabihf-objdump  arm-linux-gnueabihf-ar arm-linux-gnueabihf-gcc-4.7.2 arm-linux-gnueabihf-gprof arm-linux-gnueabihf-pkg-config  arm-linux-gnueabihf-as arm-linux-gnueabihf-gcc-ar arm-linux-gnueabihf-ld arm-linux-gnueabihf-pkg-config-real  arm-linux-gnueabihf-c++ arm-linux-gnueabihf-gcc-nm arm-linux-gnueabihf-ld.bfd arm-linux-gnueabihf-ranlib  arm-linux-gnueabihf-c++filt arm-linux-gnueabihf-gcc-ranlib arm-linux-gnueabihf-ldd arm-linux-gnueabihf-readelf  arm-linux-gnueabihf-cpp arm-linux-gnueabihf-gcov arm-linux-gnueabihf-ld.gold arm-linux-gnueabihf-size  arm-linux-gnueabihf-elfedit arm-linux-gnueabihf-gdb arm-linux-gnueabihf-nm arm-linux-gnueabihf-strings  arm-linux-gnueabihf-g++ arm-linux-gnueabihf-gdbtui arm-linux-gnueabihf-objcopy arm-linux-gnueabihf-strip
9,android studio ndk怎么调用
android studio ndk调用过程如下: 通过jniaes案例说明调用NDK层配置过程 而我们通过底层来判断签名是否正确,如果正确则继续执行核心代码,否则退出程序,这样就可以防止别人恶意反编译,并进行二次打包。 首先去官网下载一个最新的NDK,随便放到哪都行,像我放在D:\Dev\Android\android-ndk-r10d. (1)
新建一个项目:名称JniAes 首先在java类中添加native接口,注意写好native接口和System.loadLibrary()即可。代码如下: 1 public synchronized static native String getFromNativeIv();2 public synchronized static native String
getStringFromNative();3 public synchronized static native int jniCheckAPP(Context context);4 然后build project得到其中中间文件,我们关注的是.class文件。编译OK以后生成的class文件在AS工程的如下目录:
aes\app\build\intermediates\classes\debug\android\ (2)接下来跟class文件生成相应的.h头文件,执行如下命令即可 点击"View->Tool Windows->Terminal" 即在Studio中进行终端命令行工具.执行如下命令生成c语言头文件.javah -d jni -classpath
c:\Users\sodinochen\AppData\Local\Android\sdk\platforms\android-16\android.jar;..\..\build\intermediates\classes\debug com.aes.jniaes.MainActivity (3)然后将刚才的
.h文件剪切过来。在jni目录下新建一个c文件,随意取名,我的叫strk.c 。 strk.c文件,用于实现核心代码逻辑,判断包名.哈希值是否合法,如果返回1,为合法。反之,则不合法。入口方法为:jint Java_com_aes_jniaes_MainActivity_jniCheckAPP(JNIEnv* env, jobject context, jobject
thiz) 接下来在工程的local.properties文件中添加NDK路径(上面下载好的那个NDK),类似其中的SDK路径一样,我的添加后如下: sdk.dir=D\:\\Dev\\Android\\android-sdk-windowsndk.dir=D\:\\Dev\\Android\\android-ndk-r10d (4)接下来在app
module目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下内容: defaultConfig { applicationId "com.aes.jniaes" minSdkVersion 15 targetSdkVersion 22 versionCode 1 versionName
"1.0" ndk { moduleName "checkapp-jni" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。 } } (5)最后就是添加静态初始化loadLibrary代码,添加如下: static {
System.loadLibrary("checkapp-jni"); //so文件的名字 } 编译出来的so文件在aes\app\build\intermediates\ndk\debug\lib目录下 那么如何将编译好的so文件进行使用,可以通过如下方式: 二 . 引用so文件 (1).在“src/main”目录中新建名为“jniLibs”的目录;
(2).将so文件复制、粘贴到“jniLibs”目录内。
10,android ndk 怎样调用第三方的so库文件
问题描述:Android如何调用第三方SO库;已知条件:SO库为Android版本连接库(*.so文件),并提供了详细的接口说明;已了解解决方案:1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;求解:1.上面两种方案是否可行?不可行的话存在什么问题?2.两种方案有什么区别?为什么网上大部都是用的第二种方案?3.只有一个*.so文件,并提供了详细的接口说明,是否可在ANDROID中使用它?
首先要看这个SO是不是JNI规范的SO,比如有没有返回JNI不直接支持的类型。也就是说这个SO是不是可以直接当作JNI来调用。如果答案是否定的,你只能选第二个方案。
如果答案是肯定的,还要看你是不是希望这个SO的库直接暴露给JAVA层,如果答案是否定的,你只能选第二个方案,比如你本身也是一个库的提供者。
一般如果你只有SO,就说明这个是别人提供给你的,你可以要求对方给你提供配套的JAVA调用文件。
1、这个要看这个SO是不是符合JNI调用的规范。还要看你自己的意愿。2、因为第二种方法最灵活,各种情况都可以实现。3、可以
看能不能直接从JAVA调用的最简单的方法就是看SO里的函数名是不是Java_XXX_XXX_XXX格式的是就可以,你可以自己写一个配套的JAVA文件,注意一下SO函数名和JAVA函数名的转换规则,或者向SO提供方索要;不是的话就选第二种方案吧。
1、检查所需文件是否齐全使用第三方动态库,应该至少有2个文件,一个是动态库(.so),另一个是包含动态库API声明的头文件(.h)2、封装原动态库原动态库文件不包含jni接口需要的信息,所以我们需要对其进行封装,所以我们的需求是:将libadd.so 里面的API封装成带jni接口的动态3、编写库的封装函数libaddjni.c根据前面生成的com_android_libjni_LibJavaHeader.h 文件,编写libaddjni.c,用来生成libaddjni.so
Android中集成第三方软件包(.jar, .so)
Android中可能会用到第三方的软件包,这包括Java包.jar和Native包.so。jar包既可通过Eclipse开发环境集成,也可通过编译源码集成,看你的工作环境。
假定自己开发的程序为MyMaps,需要用到BaiduMaps的库,包括baidumapapi.jar和libBMapApiEngine_v1_3_1.so。
一、Eclipse中集成第三方jar包及.so动态库
MyMaps工程下创建目录libs以及libs/armeabi,把baidumapapi.jar放在的libs/目录下,把libBMapApiEngine_v1_3_1.so放在libs/armeabi/下。
Eclipse中把第三方jar包baidumapapi.jar打包到MyMaps的步骤:
1. 右击工程,选择Properties;2. Java Build Path,选择Libraries;3. Libraries页面点击右面按钮“Add Library…”;4. 选择“User Library”,点击“Next”;5. 点击“User Libraries”按钮;6. 在弹出界面中,点击“New…”;7. 输入“User library name”,点击“OK”确认;8. 返回之后,选择刚刚创建的User library,右面点击“AddJARs”;9. 选择MyMaps/libs/下的baidumapapi.jar;10. 确认,返回。
这样,编译之后,该jar包就会被打进MyMaps.apk中,libBMapApiEngine_v1_3_1.so也被打包在lib/armeabi/中。程序运行过程中,libBMapApiEngine_v1_3_1.so被放在/data/data//lib/下,加载动态库时系统会从程序的该lib/目录下查找.so库。
二、源码中集成第三方集成jar包及.so动态库
Android源码中MyMaps放在packages/apps下。MyMaps下创建目录libs以及libs/armeabi,并把baidumapapi.jar放在libs/,把libBMapApiEngine_v1_3_1.so放在libs/armeabi。
2.1 修改Android.mk文件
Android.mk文件如下:
[plain] view plaincopyLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_JAVA_LIBRARIES := libbaidumapapi
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := MyMaps
include $(BUILD_PACKAGE)
##################################################include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=libbaidumapapi:libs/baidumapapi.jarLOCAL_PREBUILT_LIBS :=libBMapApiEngine_v1_3_1:libs/armeabi/libBMapApiEngine_v1_3_1.soLOCAL_MODULE_TAGS := optionalinclude $(BUILD_MULTI_PREBUILT)
# Use the following include to make our testapk.include $(callall-makefiles-under,$(LOCAL_PATH))
1 集成jar包LOCAL_STATIC_JAVA_LIBRARIES取jar库的别名,可以任意取值;LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar库的规则,格式:别名:jar文件路径。注意:别名一定要与LOCAL_STATIC_JAVA_LIBRARIES里所取的别名一致,且不含.jar;jar文件路径一定要是真实的存放第三方jar包的路径。编译用BUILD_MULTI_PREBUILT。2 集成.so动态库LOCAL_PREBUILT_LIBS指定prebuilt so的规则,格式:别名:so文件路径。注意:别名一般不可改变,特别是第三方jar包使用.so库的情况,且不含.so;so文件路径一定要是真实的存放第三方so文件的路径。编译拷贝用BUILD_MULTI_PREBUILT。
2.2 加入到GRANDFATHERED_USER_MODULES
在文件user_tags.mk中,把libBMapApiEngine_v1_3_1加入到GRANDFATHERED_USER_MODULES中
[plain] view plaincopyGRANDFATHERED_USER_MODULES += \… \libBMapApiEngine_v1_3_1
user_tags.mk可以是build/core下的,也可以是$(TARGET_DEVICE_DIR)下的,推荐修改$(TARGET_DEVICE_DIR)下的。
2.3 编译结果
MyMaps.apk编译生成在out/target/product//system/app/下;libBMapApiEngine_v1_3_1.so放在out/target/product//system/lib/下,这也是系统加载动态库时搜索的路径。
上一篇:学生奖品,奖励给学生的,买什么奖品好?求助各位高手
下一篇:单片机的最小系统,单片机最小系统是什么
}

我要回帖

更多关于 汽车车身电脑bcm维修资料 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信