1.概述
最近项目全线转移到Mac下使用使用Android studio开发。遇到关键代码封装到 ***native***层,此时在win下的NDK配置步骤全部失效。
为此,花费了大量时间用来查阅资料,在此,记录下来,分享给大家供以后配置中作为参考。
2.环境
本人使用的开发配置 是:MAC OS 10.10 +androioid studio 1.2+android-ndk-r10e-darwin-x86_64+git 。其他配置类似操作即可。
3.操作流程
1.MAC 下打开终端 获取NDK目录的权限
chmod a+x android-ndk-r10c-darwin-x86_64.bin
后面为文件存放路径 。
2.cd 路径。
cd 路径。
如果不知道文件的具体路径,可以直接拖拽到命令终端窗口下即可。
3.继续执行解压命令
./android-ndk-r10c-darwin-x86_64.bin
此时在文件存放路径会得到一个解压完成后的NDK存放目录。
效果如下图:
得到下图说明:解压文件成功。
此时:打开:命令终端:
请按如下步骤操作:
1.输入命令
pico .bash_profile
2.export NDK_ROOT=/Applications/Android-NDK/android-ndk-r10e
3.export PATH=$PATH:$NDK_ROOT
最后保存( control+X) 选 Y
4.更新刚配置的环境变量输入source .bash_profile
验证成功
1.终端下进入
NDK 下的sample 文件夹下
按如下步骤测试是否配置成功:
1.cd hello-jni/
2. 执行ndk-build
出现如下界面表示基本变量配置成功。。
- public class MainActivity extends Activity{
- static {
- System.loadLibrary("JniTest");
- }
- public native String getStringFromNative();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- TextView txtView = (TextView) findViewById(R.id.txt);
- txtView.setText(getStringFromNative());
- }
- }
Step: 2.执行Build->Make Project
Step: 3.javah生成c头文件
- javah -d jni -classpath c:\Users\sodinochen\AppData\Local\Android\sdk\platforms
- \android-16\android.jar;..\..\build\intermediates\classes\debug lab.sodino.jnitest.MainActivity
最后的生成结果:
Step: 4.编辑c文件
- /* DO NOT EDIT THIS FILE - it is machine generated */
- #include <jni.h>
- #include <android/log.h>
- #ifndef LOG_TAG
- #define LOG_TAG "ANDROID_LAB"
- #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
- #endif
- /* Header for class lab_sodino_jnitest_MainActivity */
- #ifndef _Included_lab_sodino_jnitest_MainActivity
- #define _Included_lab_sodino_jnitest_MainActivity
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: lab_sodino_jnitest_MainActivity
- * Method: getStringFromNative
- * Signature: ()Ljava/lang/String;
- */
- JNIEXPORT jstring JNICALL Java_lab_sodino_jnitest_MainActivity_getStringFromNative
- (JNIEnv * env, jobject jObj){
- LOGE("log string from ndk.");
- return (*env)->NewStringUTF(env,"Hello From JNI!");
- }
- #ifdef __cplusplus
- }
- #endif
- #endif
- Error:Execution failed for task ':app:compileDebugNdk'.
- > NDK not configured.
- Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties.
- (On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk)
- ndk {
- moduleName "JniTest"
- ldLibs "log", "z", "m"
- abiFilters "armeabi", "armeabi-v7a", "x86"
- }
- Error:Execution failed for task ':app:compileDebugNdk'.
- > com.android.ide.common.internal.LoggedErrorException: Failed to run command:
- D:\Mission\adt-bundle-windows\ndk-r10b\ndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\Android.mk APP_PLATFORM=android-21 NDK_OUT=C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\obj NDK_LIBS_OUT=C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\lib APP_ABI=armeabi,armeabi-v7a,x86
- Error Code:
- 2
- Output:
- make.exe: *** No rule to make target `C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/JniTest/C_\Users\sodinochen\AndroidstudioProjects\JniTest2\app\src\main\jni', needed by `C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/JniTest/C_\Users\sodinochen\AndroidstudioProjects\JniTest2\app\src\main\jni\main.o'. Stop.
Step: 6.安装运行
查看Log打印:
-
顶
- 13
-
踩
- 0