項(xiàng)目實(shí)戰(zhàn)①―高仿知乎日?qǐng)?bào)(0)-->NDK將私密數(shù)據(jù)隱藏起來(lái)
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-12-13 09:10:08 閱讀次數(shù):4461次

①安卓程序員真的很累
GAP ,NDK,說(shuō)實(shí)話我基本算個(gè)了解的程度,如果你要準(zhǔn)備加深安卓基礎(chǔ)的話,好吧,NDK是1道門(mén)坎,還有后面的 架構(gòu)層,這尼瑪不花個(gè)1年你弄的定,GAP呢,如果你真要學(xué)的話,好吧,js css html5,還有web的框架,這尼瑪又是1年,你能學(xué)這些東西的條件,還是安卓基礎(chǔ)比較不錯(cuò)的情況下,gap對(duì)快速開(kāi)發(fā)是有著1定好處的,算了 不扯淡了,回到文章里面。
②開(kāi)始學(xué)NDK加入到自己的項(xiàng)目里面
基于本人水平,暫時(shí)只能用NDK拿到隱藏1些APP的隱私數(shù)據(jù),比如app的url連接,也算是1個(gè)小利用吧
1配置NDK環(huán)境
你知道我對(duì)NDK環(huán)境的配置,最擔(dān)心的是啥不,就是ndk必備的cywin PS:cywin是1款可以摹擬linux環(huán)境軟件
好了 到這里 大家可以移步到 android官網(wǎng)去下 NDK了。http://developer.android.com/
如果進(jìn)不去呢,可以參考我這篇帖子
讓你能閱讀谷歌網(wǎng)站,仔細(xì)研究androidAPI======有獨(dú)立看英語(yǔ)谷歌文檔的能力
OK, 相信大家進(jìn)了官網(wǎng)下NDK 還是會(huì)的
解壓下載的android-ndk32-r10-windows-x86_64.zip,將其放到你想要的目錄下。
注:R7之前的版本,必須要安裝Cygwin才能使用NDK。從R7開(kāi)始,Windows版本的NDK提供了1個(gè)ndk-build.cmd腳本,可以直接利用這個(gè)腳本編譯。想要做到這1 點(diǎn),只要為Eclipse Android工程添加1個(gè)Builder,就可以實(shí)現(xiàn)Eclipse的自動(dòng)編譯NDK,這1點(diǎn)在后面的步驟會(huì)有介紹。
2,建立1個(gè)項(xiàng)目
然后單獨(dú)建立1個(gè)包 C 建1個(gè)類(lèi) API.java 注意這1句System.loadLibrary("api"); 它可以用來(lái)裝載庫(kù)文件,不論是JNI庫(kù)文件還是非JNI庫(kù)文件
api.java
package com.qf.teach.project.zhihudaily.c;
public class API {
static {
System.loadLibrary("api");
}
/**
* 主題
* @return
*/
public static native String getThemesUrl();
/**
* 歡迎圖片
* @return
*/
public static native String getStartImageUrl();
/**
* 本日熱聞
* @return
*/
public static native String getLatestUrl();
/**
* 歷史新聞<br />
* 返回的字符串需要使用String.format();方法格式化<br />
* 例如:String.format(API.getBefore(), "20141201");
* @return
*/
public static native String getBefore();
/**
* 主題列表<br />
* 返回的字符串需要使用String.format();方法格式化<br />
* 例如:String.format(API.getTheme(), "11");
* @return
*/
public static native String getTheme();
/**
* 詳情
* 返回的字符串需要使用String.format();方法格式化<br />
* 例如:String.format(API.getStory(), "4354228");
* @return
*/
public static native String getStory();
/**
* 詳情-評(píng)論
* 返回的字符串需要使用String.format();方法格式化<br />
* 例如:String.format(API.getStoryExtra(), "4354228");
* @return
*/
public static native String getStoryExtra();
}
//
String.format 將指定字符串中的每一個(gè)格式項(xiàng)替換為相應(yīng)對(duì)象的值的文本等效項(xiàng)。
3,將NDK加入自己的項(xiàng)目了
1.生成java頭文件
接著就是重點(diǎn)了,在SRC目錄里建立1個(gè)jni的目錄,然后 找到api.java的目錄里 打開(kāi)CMD 命令 輸入 javah api的類(lèi)全名
這模樣就會(huì)得到1個(gè)頭文件 ,然后將它拷貝放入 jni 目錄
2.編寫(xiě)C語(yǔ)言代碼
有人說(shuō)生成的頭文件都會(huì)出錯(cuò),我只能說(shuō),請(qǐng)留言 我把詳細(xì)教程發(fā)給你,按著步驟來(lái),ndk環(huán)境 3分鐘弄定
好吧 我先給大家看看我的頭文件吧
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_xiaoxin_ZhiHuDateNews_c_API */
#ifndef _Included_com_xiaoxin_ZhiHuDateNews_c_API
#define _Included_com_xiaoxin_ZhiHuDateNews_c_API
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_xiaoxin_ZhiHuDateNews_c_API
* Method: getThemesUrl
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getThemesUrl
(JNIEnv *, jclass);
/*
* Class: com_xiaoxin_ZhiHuDateNews_c_API
* Method: getStartImageUrl
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getStartImageUrl
(JNIEnv *, jclass);
/*
* Class: com_xiaoxin_ZhiHuDateNews_c_API
* Method: getLatestUrl
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getLatestUrl
(JNIEnv *, jclass);
/*
* Class: com_xiaoxin_ZhiHuDateNews_c_API
* Method: getBefore
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getBefore
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif

復(fù)制java頭文件的代碼
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getThemesUrl
(JNIEnv *, jclass);
記住 加 env thiz 也就變成這樣了
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getThemesUrl
(JNIEnv *env, jclass thiz){
好啦 下面就是C代碼了
# include "com_xiaoxin_ZhiHuDateNews_c_API.h"
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getThemesUrl
(JNIEnv *env, jclass thiz){
return (*env)->NewStringUTF(env, "http://news-at.zhihu.com/api/3/themes");
}
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getStartImageUrl
(JNIEnv *env, jclass thiz) {
return (*env)->NewStringUTF(env,
"http://news-at.zhihu.com/api/3/start-image/480*728");
}
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getLatestUrl
(JNIEnv *env, jclass thiz) {
return (*env)->NewStringUTF(env,
"http://news-at.zhihu.com/api/3/stories/latest");
}
JNIEXPORT jstring JNICALL Java_com_xiaoxin_ZhiHuDateNews_c_API_getBefore
(JNIEnv *env, jclass thiz){
return (*env)->NewStringUTF(env,
"http://news-at.zhihu.com/api/3/stories/before/%s");
}
類(lèi)里面有1個(gè) URL 也就是我要得到的URL在里面
然后在復(fù)制1個(gè)Android.mk 進(jìn)去
代碼以下
# 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⑵.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 := api
LOCAL_SRC_FILES := com_xiaoxin_ZhiHuDateNews_c_API.c
include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE 這個(gè)是 java代碼調(diào)用的類(lèi)的名稱(chēng),
不是全類(lèi)名~~~~~~~~?
LOCAL_SRC_FILES 是 jni下C代碼 是名稱(chēng)不是全類(lèi)名~~~~~~~~~~~~~~~
3.java和c的混合編譯
其實(shí)再次之前都還沒(méi)跟NDK扯上關(guān)系 到這里就開(kāi)始有關(guān)系了
新建并配置1個(gè)Builder
點(diǎn)擊Project->Properties->Builders->New,新建立1個(gè)Builder。在彈出的對(duì)話框上面點(diǎn)擊Program,OK!如圖所示

在彈出的對(duì)話框【Edit Configuration】中,配置選項(xiàng)卡【Main】:
Location中需要填入nkd-build.cmd的路徑(NDK安裝目錄下)。
Working Diretcoty中需要填入TestNDK的工程根目錄。如圖所示:
注:不要漏了

配置選項(xiàng)卡【Refresh】,如圖所示:
勾選“Refresh resources upon completion”,
勾選“The entire workspace”,
勾選“Recuresively include sub-folders”。
配置選項(xiàng)卡【Build Options】,如圖7所示:
勾選“After a “Clean””,
勾選“During manual builds”,
勾選“During auto builds”,
勾選“Specify working set of relevant resources”。
點(diǎn)擊“Specify Resources…”勾選TestNDK工程的“jni“目錄 ,Finish!
然后你在按下 保存 eclipse就會(huì)自動(dòng)幫我們編譯了 如果你看到下圖 說(shuō)明你成功了
OK 下1節(jié)正式開(kāi)始講 知乎日?qǐng)?bào)的教程了~~~~~~~~~~~~~~~~~~```如果NDK配置環(huán)境出錯(cuò)了,請(qǐng)給我留言 我發(fā)詳細(xì)教程給你
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)