利用Android Studio编写 Android上的c与c++程序
Android Studio 2.3.1
FrankNote: Android 3.1.2
1. 新建New Project:
a)
b)
c)
d)
e)
2. 自动打开新建的工程:
a) 以project的方式显示工程:
b) Main目录下新建jni文件夹:
FrankNote: 如果之前没有安装NDK, 自动下载NDK, 退出,重新打开Android Studio 就可以看到下图所示的项目
c) jni文件夹下新建test_hello_world.cpp:
d) jni文件夹下新建Android.mk:
FrankNote:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE LOCAL_MODULE := test_hello_world
LOCAL_SRC_FILES =: test_hello_world.cpp
include $(BUILD_EXECUTABLE)
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
原因 PIE这个安全机制从4.1引入,但是Android L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的。因此不会报错。但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行。解决办法非常简单,在Android.mk中加入如下flag就行。
https://blog.csdn.net/hxdanya/article/details/39371759
FrankNote End
e) jni文件夹下新建Application.mk文件,作用在于支持c++共享库:
FrankNote:
APP_STL := gnustl_static
原因:
原方案使用的是共享库,这不一定都支持所有的机型,改用静态库gnustl_static 问题解决。
https://blog.csdn.net/luozhuang/article/details/36418229
f) 注意观察project下的local.properties文件:
g) 修改project下的gradle.properties文件,增加配置android.useDeprecatedNdk=true,其作用在于告诉系统使用ndk编译:
h) 修改app目录下的build.gradle文件,增加配置:
i. ndk的abiFilters配置作用在于限定生成的cpu/abi。
ii. jni.srcDirs = [] 表示禁止as自动ndk编译,采用手动ndk-build。
iii. jniLibs.srcDirs = [‘src/main/libs’] 表示经过ndk-build编译后的so路径。
i) jni文件夹下新建Cmd script,make_x86.cmd,用于手动ndk-build:
j) 右键点击make_x86.cmd文件选择Run cmd script:
k) 获得目标程序文件test_hello_world:
C:\Users\jacki\AppData\Local\Android\Sdk\ndk-bundle\ndk-build.cmd APP_ABI="x86"
3. 在Android虚拟机中执行程序:
a) 开启x86 cpu/abi的虚拟机:
b) 使用adb命令把文件传到Android虚拟机中,并赋予可执行权限:
静态库没有.so文件
c) 添加当前路径为so库文件查找路径命令,防止elf文件运行阶段找不到so库的问题,LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp
利用Android Studio编写 Android上的c与c++程序的更多相关文章
- Android Studio编写运行测试纯java代码可带main()函数
问题 小伙伴们在做安卓项目的时候,是不是有时候会忘记某些api的使用方法,不太确定他们的结果是怎样的,需要写一些测试代码,验证看看我们的写法是否正确.刚开始的时候我是在页面上写一个Button,添加点 ...
- android studio 简介 (上)
自从android官方宣布不再提供eclipse adt的更新之后,android studio的推进速度超乎想象得快,不管是github上的源码分享,还是stackoverflow上的问题提问,几乎 ...
- Android Studio中mac上面的安装
Android Studio中mac上面的安装 学习了:https://blog.csdn.net/xianrenli38/article/details/79347170 http://www.an ...
- Android开发新手学习总结(一)——使用Android Studio搭建Android集成开发环境
[新手连载]一:使用Android Studio搭建Android集成开发环境http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87055&a ...
- 使用Android Studio搭建Android集成开发环境
有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...
- Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境
有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...
- 使用Android Studio搭建Android开发环境
一.Android Studio简单介绍 2013年GoogleI/O大会首次发布了Android Studio IDE(Android平台集成开发环境).它基于Intellij IDEA开发环境,旨 ...
- 【Android应用开发】Android Studio 简介 (Android Studio Overview)
一. Intelij IDEA 环境简介 Android Studio 来源 : Android Studio 是 Intelij IDEA 的免费版本 + Android SDK 集成的; -- I ...
- Android开发工具Android Studio、Android SDK和Genymotion完全配置
所谓“工欲善其事,必先利其器”.Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提 ...
随机推荐
- linux下mysql开启远程访问权限及防火墙开放3306端口(mysql开放host访问权限)
开启mysql的远程访问权限默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限.主流的有两种方法,改表法和授权法.相对而言,改表法 ...
- 2018年3大UI设计趋势,你知道吗?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 之前小编已经和大家讨论了2018年软件测试的五大趋势,现在让我们一起来看看移动UI设计在2018年会 ...
- c++沉思录中 对字符串进行围边 横向连接 竖向连接操作的练习
// MyPics.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string> #include < ...
- Net下的 ORM框架介紹(转)
http://www.cnblogs.com/zhaoyx/articles/1896638.html 在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: ...
- UVa 506 System Dependencies (细节问题)
题意:输入几种指令,让你进行模拟操作,指令如下: DEPEND item1 item2 (item3 ...) 安装item1需要先安装item2(.item3……) INSTALL item1 安装 ...
- html 中的<script>标签
https://www.w3.org/TR/html51/semantics-scripting.html#the-script-element 一. <script type='text/ja ...
- IO 之 InputStream 和 Reader
package java.io; // Representing an input stream of bytes. public abstract class InputStream impleme ...
- linux每天一小步---find命令详解
1 命令功能 find命令用于搜索指定目录下的文件,并配合参数做出相应的处理. 2 命令语法 find 搜索路径pathname 选项option [-exec -ok -print 执 ...
- Spring MVC3.2 通过Servlet3.0实现文件上传
Servlet3.0规范增加了对文件上传的原生支持,这里记录一下Spring MVC3通过Servlet3上传文件的实现. 配置文件: applicationContext.xml <!-- s ...
- [label][javascript-Unit Test][JSLint]A Guide To JSLint Messages
原文链接: http://www.jameswiseman.com/blog/2011/03/26/coding-convention-an-style-guide/ http://www.james ...
(2017-05-22 19:01:20)