NDK

生成自定义NDK交叉编译链(toolchain)

℡╲_俬逩灬. 提交于 2019-12-11 01:16:29
背景:在Mac下编译FFmpeg库时,看了比较多的教程基本都失败,偶然间发现NDK在去GCC化,需要通过交叉编译来完成编译,这里记录下NDK交叉编译链过程 地址 https://developer.android.google.cn/ndk/guides/standalone_toolchain 简单说交叉编译就是在A平台下编译B平台上可以使用的二进制库文件。 环境 操作系统:mac os 10.14.2 ndk版本:android-ndk-r20 编译器:clang 选择工具链(toolchain) android平台目前的架构有armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips,在编译不同平台架构的库时,我们需要指定不同的交叉编译链来完成编译的工作,具体对应关系如下表: ABI toolchain armeabi-v7a armv7a-linux-androideabi arm64-v8a aarch64-linux-android x86 i686-linux-android x86-64 x86_64-linux-android 具体对应工具链的地址是在$NDK_HOME/toolchains目录中 制作工具链(toolchain) NDK提供make-standalone-toolchain.sh

Ubuntu中配置Android NDK 开发环境

江枫思渺然 提交于 2019-12-10 14:51:30
官网下载地址: https://developer.android.com/ndk/downloads/index.html 也可以去这里下载: http://www.androiddevtools.cn/ 下载你需要的版本,我需要往Ubuntu系统安装所以下载了android-ndk-r13-linux-x86_64.zip 下载完成后解压到你需要安装的路径,我解压到了"/home/work/tool/android-ndk-r13"路径下 最后配置环境变量,让系统可以找到你的ndk-build。在家目录的".bashrc"文件中添加以下内容 #set NDK env export NDK_HOME=/home/work/tool/android-ndk-r13 export PATH=$NDK_HOME:$PATH 执行下面命令使其生效 source ~/.bashrc 来源: CSDN 作者: @小代 链接: https://blog.csdn.net/u012851408/article/details/103474412

Android Ndk

我是研究僧i 提交于 2019-12-10 14:27:44
一、概述 在Android中调用动态库文件(*.so)都是通过jni的方式,而且往往在apk或jar包中调用so文件时,都要将对应so文件打包进apk或jar包,.h是头文件,里面一般都是一些函数定义类型定义,不会有运行的代码,cpp是源文件,是用来运行的,在cpp中加上#inlcude<>导入.h文件。 .h文件就像是一个接口,具体的实现可以在.cpp中也可以在.h中。 工程目录下图: 以上方式的存在的问题:   1、缺少灵活性比较类似静态加载了(不是静态加载),能加载的so文件绑定死了;   2、但so文件很多或很大时,会导致对应的apk和jar包很大;   3、不能动态的对so文件更新; 解决办法:http://www.cnblogs.com/sevenyuan/p/4202834.html 二、 JNI_Android项目中调用.so动态库实现详解 http://www.cnblogs.com/sevenyuan/p/4202759.html 三、jni教程 http://blog.csdn.net/jiuyueguang/article/details/9447245 四、demo https://github.com/dennishucd/FFmpeg4Android/tree/master/FFmpeg4Android (经典!) 五、 一个注意: android

使用Android Studio 进行NDK开发和调试

那年仲夏 提交于 2019-12-07 21:08:07
尽管Android Studio已经越来越流行了,但很多人还是习惯于Eclipse或源码环境下开发JNI应用。个人认为使用Android Studio作NDK开发是必然趋势,所以本文将简单介绍如何在Android Studio上实现NDK开发。 简介 JNI JNI 是Java Native Inteface的缩写,是Java中定义的一种用于连接Java和C/C++接口的一种实现方式。 NDK NDK 是 Native Developmentit的缩写,是Google在Android开发中提供的一套用于快速创建native工程的一个工具。 使用这个工具可以很方便的编写和调试JNI的代码。 NDK可从 官网 或 AndroidDevTools (个人网站)下载。 Gradle Gradle 是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置。 以往Android NDK开发需要在Eclipse或源码环境下,建立并配置Android.mk和Application.mk,且还要通过java命令生成.h头文件,才能编译生成so库。但在Android Studio中这些步骤都不需要,因为Gradle足够强大,只需配置Gradle即可编译生成so库。 gradle-experimental插件

由于代码下载不完全报错的处理方法若干

风流意气都作罢 提交于 2019-12-07 21:07:53
编译ICS时遇到 build/core/java.mk:20: *** dalvik/dexgen: Invalid LOCAL_SDK_VERSION '4' Choices are: current . Stop.以及其类似的错误: user@Ubuntu1004:~/omap3/ics-google-re/mydriod$ make ============================================ PLATFORM_VERSION_CODENAME=AOSP PLATFORM_VERSION=4.0.3.0.2.0.1.0 TARGET_PRODUCT=full TARGET_BUILD_VARIANT=eng TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=OPENMASTER OUT_DIR=out ============================================ /bin/bash: line 0: cd: cts/tools/cts-native-xml-generator

Android LED(NDK)

坚强是说给别人听的谎言 提交于 2019-12-07 15:17:42
开发工具: Eclipse 开发语言: Java、C 拿到pcDuino很久了,因为太忙一直没有用过。最近把原版的ubuntu换成了Android,以前自学过Android App, 但没有操作底层资源的经验。通过借鉴 “ shinan ” 的“ Android NDK GPIO操作(pcduino 装Android系统)” 帖子完成了自己的LED操作App,并做了一部分修改与优化。 一、环境搭建: 1)、安装Eclipse; 2)、安装ADT; 3)、安装NDK; 具体环境搭建参考: http://www.oschina.net/question/1402563_133543 二、源代码: 1)、新建Android工程LED, LED.xml源码; 2)、LED.java源码(定义本地函数) ; 3)、LEDCTL.c源码(实现本地函数); LED.zip 289.51 KB, 下载次数: 20 来源: oschina 链接: https://my.oschina.net/u/1777508/blog/339752

(十四)Android NDK混淆

一笑奈何 提交于 2019-12-07 15:09:40
1、ollvm下载编译 我的是macbook环境。 参考obfuscator官网: https://github.com/obfuscator-llvm/obfuscator/wiki 执行下面的命令下载并编译: $ git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/ $ make -j7 cmake找不到的话,上cmake.org官网下载,并设置环境变量。 编译成功后,生成的文件主要在build/bin 和 build/lib 这2个文件夹。 2、整合到NDK 网上别人有介绍在NDK目录手动创建llvm之类的新文件夹,拷贝build/bin 和 build/lib2个文件夹,有编译问题,懒得去折腾。 我的做法是: 找到Android SDK目录中的 ../ndk-bundle/toolchains/llvm 文件夹,先备份下llvm文件夹,然后将obfuscator编译好的build/bin 和 build/lib2个文件夹直接拷贝到../llvm/prebuilt/darwin-x86_64/文件夹下,直接覆盖替换。

卸载Android app弹出浏览器的一种实现

◇◆丶佛笑我妖孽 提交于 2019-12-07 12:04:32
卸载Android应用程序时,经常会弹出网页,做些用户数据的调查统计。 Android是可以获取到其它应用被卸载掉这个事件,但是并不能获取自身被卸载这个事件。从纯粹的java层是没法实现的, 本文介绍一种方法来实现它。 原理 简单来说就是创建后台进程,监控文件夹的删除事件。比如说app的包名是com.myname.myapp,后台进程监控的文件夹就是/data/data/com.myname.myapp。如何监控文件夹被删除这一事件,主要用的是inotify系列函数,这在 jni中的进程通讯的另一种实现方式 有介绍。 注意点 后台进程只需要一个就行了,不需要多个的,之前我注意到企鹅的一款产品做这个功能时,后台启动了多个进程。如何实现?可以参考 Android JNI层确保只有一个进程的一个实现 ,提供一种思路。 几种重点测试情形:a. 清理app的数据 b.升级app c. 强制关闭app,然后重启app。 代码 github地址 uninstallWatcher 代码实现以及demo都有了,接口也已经封装好,判断后台进程是否唯一,有点过于简单, 欢迎完善代码 。 代码使用也很简单。 public class DemoApp extends Application{ @Override public void onCreate() { Log.i("UninstallDemoApp

Android 源代码中增加新apk

心已入冬 提交于 2019-12-07 09:39:57
Android build system就是编译系统的意思 在我们需要向自己编译的源代码中增加模块的时候,需要一些规则,当然这个规则都是类似的。 Android.mk文件解析 让我们来看一个 Android.mk 文件的样子 Java代码 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE :=Hello LOCAL_SRC_FILES := hello.c include $(BUILD_SHARED_LIBRARY) 复制代码 复制代码 ① LOCAL_PATH :=$(call my-dir) 固定写法, LOCAL_PATH 表示此时位于工程目录的根目录中, (call my-dir) 的功能由编译器提供,被用来返回当前目录的地址(包含 Android.mk 本身) ② include $(CLEAR_VARS) 固定写法, CLEAR_VARS 这个变量由编译系统提供,并且要执行一个 GNU makefile 文件,这个功能会清理掉所有以 LOCAL_ 开头的内容(比如 LOCAL_MODULE 、 LOCAL_SRC_FILES 等),除了 LOCAL_PATH 。这句话也是必须的,因为如果所有变量都是全局变量的话,所有的可控的编译文件都需要在一个单独的 GNU 中被解析并执行 ③ LOCAL

android NDK开发入门。

心已入冬 提交于 2019-12-07 09:37:45
关于 NDK 的使用,首先需要了解一个概念: JNI 。什么是 JNI ? 2.1 Hello-jni 这个是 NDK 自带的例子程序,安装官方网站的说明,一步步来,应该没有什么问题,这里就不细说了。 2.2 My God I did it 学习的第一步,就是模仿。我们依照上面 Hello-jni 的例子,在创建自己的 NDK 程序。在此过程中,对相关的内容和概念进行分析和说明。 首先, 在工程的 src 夹子下用来放置 Java 文件。我们打开 Eclipse ,然后新建一个 Android 工程,工程名就叫 MyJNI ,工程路径选择我们创建的 NDK 的路径。这里需要注意的是,工程名,包名等,需要和上面的 c 文件中的保持一致。 (Java _ com_jpf_myjni _ MyJNI _ stringFromJNI) 工程建立好后,编辑 src/com/jpf/myjni/MyJNI.java 文件,内容如下: package com.jpf.myjni; import android.app.Activity; import android.widget.TextView; import android.os.Bundle; public class MyJNI extends Activity { /** Called when the activity is